![]() |
1
16
试着把
extern "C" 将指示编译器使用C链接,而不是C++,这将阻止它执行。 name mangling 关于函数。所以它将在库中查找函数openssl\u call,而不是?openssl\u call@@YAHPAUssl\u State@@HHH@. |
![]() |
2
11
|
![]() |
3
10
我遇到了在MSVC中使用mingw编译的dll的相同情况。我使用以下工具使其工作:
粗体指定gcc将生成一个*def文件来为导出的项目编写脚本。然后您需要使用lib.exe,它随MSVC一起分发,例如:
目前,我可以在MSVC项目中使用*.lib并正确链接dll,但出现运行时错误。无论如何,这样的工作使你的联系可行。 |
![]() |
4
5
介绍 使用不同编译器创建的对象文件和静态库,甚至使用同一编译器的不同版本创建的对象文件和静态库,通常无法链接在一起。这个问题并不特定于MinGW:许多其他编译器是互不兼容的。如果可以的话,用同一个编译器的相同版本从源代码构建所有内容。
为什么不同的编译器不能互操作 有时人们想知道为什么编译器编写者不只是使用相同的名称损坏方案。这可能会使链接成功,但很可能会使程序在调用DLL时崩溃。真正的链接兼容性需要一个通用的应用程序二进制接口,名称损坏只是其中一个考虑因素。以下是部分列表:--
传统上,实现者故意使用不同的名称损坏方案,他们认为在链接时说“不”比让一些简单的代码工作并让问题在运行时出现要好。
参考文献: http://www.mingw.org/wiki/Interoperability_of_Libraries_Created_by_Different_Compiler_Brands |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |