在Linux上交叉编译的DLL中没有动态符号

在Linux上交叉编译的DLL中没有动态符号,linux,dll,cross-compiling,Linux,Dll,Cross Compiling,我已经在Linux(CentOS 6.7)上用MXE(Linux上的一个MinGW交叉编译环境)静态工具链创建了一个DLL。如果它与油嘴滑舌无关,一切看起来都很好。但是,如果它与glib链接,dumpbin/exports libtest.dll仅显示glib中的符号(前缀为g_,例如g_int_equal) 例如,小测试c代码 #include <glib.h> int global_func(void) { int c = 0xff; return c; } int

我已经在Linux(CentOS 6.7)上用MXE(Linux上的一个MinGW交叉编译环境)静态工具链创建了一个DLL。如果它与油嘴滑舌无关,一切看起来都很好。但是,如果它与glib链接,
dumpbin/exports libtest.dll
仅显示glib中的符号(前缀为
g_
,例如
g_int_equal

例如,小测试c代码

#include <glib.h>

int global_func(void)
{
  int c = 0xff;
  return c;
}

int local_func(int ini)
{
  int a = 1, b = 2;
  g_int_equal(&a, &b);
  return ini + 1;
}
版本脚本test.version:

FOO {
global:
    global_func;
local: *;   # hide everything else
};
然后,我将导出的符号转储到Windows中的libtest.dll中:

dumpbin /exports libtest.dll
它用glib显示了很多函数,但没有“全局函数”

这里的Glib是静态库。我还尝试了共享工具链x86_64-w64-mingw32.shared-g++。使用静态Glib,结果是一样的。因此,当我试图在带有GetProcAddress的DLL中找到某个函数时,它失败了。 有什么问题吗


我还从gnome网站下载了Glib的DLL版本。现在导出的函数是正确的。

是否使用dllexport属性(u declspec(dllexport))?请记住,ELF和DLL是完全不同的。另外,请尝试发布一个最小的示例,其他人可以使用。@borancar不,我使用的是链接器版本脚本。没有ELF。我正在Linux上交叉编译DLL。
dumpbin /exports libtest.dll