MinGW 与 MSVC 的 dll 库问题链接(未定义的引用)

MinGW linking with MSVC's dll library trouble (undefined references)

本文关键字:未定义 引用 链接 MSVC dll MinGW 问题      更新时间:2023-10-16

这可能不是第一次出现这样的问题,但是…我知道有工具用于从。dll (.def生成器)导出函数,但有无用的(对我来说),因为编译器为函数生成的名称格式是不同的。是否有任何方法(可能在.def文件中有一些额外的选项)告诉mingw编译器:_ZN6IDcDrv6CreateEPKci (mingw的损坏的名称格式)= ?Create@IDcDrv@@ sapavdcdrv @PBDH@Z (MSVC的损坏的名称格式)????(重定向lib。A对dll的引用)我说的是闭源dll,所以我不能为mingw编译dll…或者开源库,它的构建需要花费大量的时间和/或耐心。

No。MSVC名称混淆是专有的,没有文档记录。

即使你能在不同的编译器中得到一致的名称混淆,也有很多其他的小差异会使你的链接代码在各种奇怪的地方崩溃(类布局,函数调用等)。

如果你需要互操作性,写一个C接口。32位的MinGW(-w64) GCC甚至会链接到32位的MSVC C库,反之亦然(如果您包含必要的编译器库,如libgcc或MSVC默认添加到其代码生成中的安全检查cookie库)。

是的,有一个方法:

使用objconv from https://www.agner.org/optimize to

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

如果你这样做,你会得到链接。

确保

    <
  • 调用约定/gh>
  • 对象结构匹配

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