MinGW 与 MSVC 的 dll 库问题链接(未定义的引用)
MinGW linking with MSVC's dll library trouble (undefined references)
这可能不是第一次出现这样的问题,但是…我知道有工具用于从。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++中尝试过,但是谁知道呢?
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用