使用MinGW导出DLL中的自定义链接器部分

时间:2019-06-05 13:44:05

标签: c gcc dll linker mingw

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

属性(((section(“ my_custom_section”))))。

除了两个链接器生成的符号(__start_my_custom_section,__ stop_my_custom_section)之外,我还希望导出表中没有其他内容。

我尝试为自定义部分中的变量赋予不同的属性,包括“二手”。 当我用Dependency Walker检查dll时,我什么也没得到。 我也试过放

__ declspec(dllexport)extern fp_t __start_my_custom_section; 在头文件中。

我实际上尝试了所有我能找到的东西(可见性,gc-off等),但似乎没有任何效果。

//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初始化的变量,此方法就起作用,但是很明显,由于会发生冲突,我显然不能将变量放在标头中。

另一种解决方案是链接包含这些变量的额外源文件,但我想避免这种情况。

基本上,我在问是否有一种方法可以通过仅使用我在[1]中包含的单个头文件来强制dll导出表中的自定义链接器生成的符号,而不涉及DEF文件或任何其他额外的文件。 ..n] C文件,其中包含在自定义部分中添加了指针的函数。

0 个答案:

没有答案