MinGW链接与MSVC的DLL库故障(未定义的引用)

时间:2013-05-11 09:17:03

标签: c++ visual-c++ dll mingw

这可能不是第一次在这里听到这样的问题但...... 我知道有一些工具用于从.dll(.def生成器)获取导出的函数,但由于编译器为函数生成的错误名称格式不同,因此没用(对我而言)。 有没有办法(可能是.def文件中的一些额外选项)告诉mingw编译器:_ZN6IDcDrv6CreateEPKci(MingW的错位名称格式)=?创建@IDcDrv @@ SAPAVDcDrv @@ PBDH @ Z(MSVC的错位名称格式)?? ?? (重定向lib.a对dll的引用) 我说的是带有封闭源代码的dll,所以我不能为mingw编译一个dll ...或者它的构建需要大量时间和/或耐心的开源库。

2 个答案:

答案 0 :(得分:1)

没有。 MSVC名称修改是专有的,没有文档。

即使您可以在编译器之间获得一致的名称,但是还有很多其他的小差异会使您的链接代码在各种奇怪的地方崩溃(类布局,函数调用等等)。

如果需要互操作性,请编写C接口。 32位MinGW(-w64)GCC甚至可以链接到32位MSVC C库,反之亦然(如果你包含必要的编译器库,比如libgcc或安全检查cookie,那么默认情况下MSVC会添加到代码生成中。)< / p>

答案 1 :(得分:0)

是的,有一种方法:

使用objconv从https://www.agner.org/optimize

  • 重命名导出的函数。
  • 转换对象格式。
  • ...

如果正确执行此操作,则将其链接起来。

确保

  • 通话约定
  • 对象结构匹配

我没有用c ++尝试过,但是谁知道呢?