C 使用MinGW导出DLL中的自定义链接器节
我正在尝试使用MinGW(本例中为DLL)构建一个共享对象,其中包含一系列函数,我希望通过链接器生成的列表使用以下方法访问这些函数: 属性(节(“我的自定义节”)) 我还希望我的导出表中除了两个链接器生成的符号(开始、我的自定义、停止、我的自定义)之外没有任何内容 我试图给自定义部分中的变量赋予不同的属性,包括“used”。 当我用Dependency walker检查dll时,什么也得不到。 我也试着把 __declspec(dllexport)外部fp\u t\u开始\u我的\u自定义\u部分; 在头文件中 实际上,我尝试了我能找到的一切(可见性、gc关闭等),但似乎没有任何效果C 使用MinGW导出DLL中的自定义链接器节,c,gcc,dll,linker,mingw,C,Gcc,Dll,Linker,Mingw,我正在尝试使用MinGW(本例中为DLL)构建一个共享对象,其中包含一系列函数,我希望通过链接器生成的列表使用以下方法访问这些函数: 属性(节(“我的自定义节”)) 我还希望我的导出表中除了两个链接器生成的符号(开始、我的自定义、停止、我的自定义)之外没有任何内容 我试图给自定义部分中的变量赋予不同的属性,包括“used”。 当我用Dependency walker检查dll时,什么也得不到。 我也试着把 __declspec(dllexport)外部fp\u t\u开始\u我的\u自定义\u部
//header.h
typedef void (* fp_t)(void);
#define ADD_FUNC(name) \
void function_##name(void); \
__attribute__((section("custom_section"))) \
fp_t function_##name##_data = function_##name \
void function_##name(void)
//source1.c
ADD_FUNC(foo)
{
//do stuff;
}
//source2.c
ADD_FUNC(bar)
{
//do stuff;
}
主要的问题是,我需要在头中执行此操作,而不涉及任何额外的源
只要有一个用_start/_stop初始化的变量,这就可以工作,但显然我不能将变量放入头中,因为会出现冲突
另一个解决方案是链接一个包含这些变量的额外源文件,但我希望避免这种情况
基本上,我想问的是,是否有一种方法可以强制自定义链接器在dll导出表中生成符号,而不涉及DEF文件或任何其他额外文件,只需使用我在[1..n]C文件中包含的单个头文件,其中包含在自定义节中添加指针的函数