Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用MinGW导出DLL中的自定义链接器节_C_Gcc_Dll_Linker_Mingw - Fatal编程技术网

C 使用MinGW导出DLL中的自定义链接器节

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部

我正在尝试使用MinGW(本例中为DLL)构建一个共享对象,其中包含一系列函数,我希望通过链接器生成的列表使用以下方法访问这些函数:

属性(节(“我的自定义节”))

我还希望我的导出表中除了两个链接器生成的符号(开始、我的自定义、停止、我的自定义)之外没有任何内容

我试图给自定义部分中的变量赋予不同的属性,包括“used”。 当我用Dependency walker检查dll时,什么也得不到。 我也试着把

__declspec(dllexport)外部fp\u t\u开始\u我的\u自定义\u部分; 在头文件中

实际上,我尝试了我能找到的一切(可见性、gc关闭等),但似乎没有任何效果

//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文件中包含的单个头文件,其中包含在自定义节中添加指针的函数