其他分享
首页 > 其他分享> > c – 如何在MSVC中使用MingW编译的库?

c – 如何在MSVC中使用MingW编译的库?

作者:互联网

我用MingW / MSYS编译了几个库……生成的静态库总是.a文件.
当我尝试将库与MSVC项目链接时,Visual Studio会抛出“未解析的外部符号”……这意味着.a静态库与MS C链接器不兼容.我认为它必须转换为MSVC兼容的.lib文件.

.a和.lib只是.o或.obj文件的AR档案,所以有没有办法在MSVC项目中使用MingW编译的库?或者我是否必须在一个编译器/链接器中编译/链接所有内容 – 仅限MSVC / MingW?
据说MingW编译器与MSVC兼容.

我读了一些关于这个主题的线索,但是他们大多说将文件重命名为.lib应该可以完成工作,但遗憾的是它对我不起作用.

我试图链接的库是用C语言编写的.

MSVC Linker抛出的错误如下:

error LNK2019: unresolved external symbol "int __cdecl openssl_call(struct ssl_State *,int,int,int)" (?openssl_call@@YAHPAUssl_State@@HHH@Z) referenced in function _main MyAPP.obj

…还有4个相同的错误,指的是从我的app调用的其他函数.

谢谢你的建议.

解决方法:

基于此错误,您将发表评论:

error LNK2019: unresolved external
symbol “int __cdecl
openssl_call(struct ssl_State
*,int,int,int)” (?openssl_call@@YAHPAUssl_State@@HHH@Z)
referenced in function _main MyAPP.obj
all other 4 errors are same only with
other functions names

尝试在openssl的include文件周围添加extern“C”.例如:

extern "C" {
include "openssl.h"
}

使用extern “C”将指示编译器函数正在使用C链接,而不是C,这将阻止它在函数上执行name mangling.所以它会在库中寻找openssl_call函数,而不是?openssl_call @@ YAHPAUssl_State @@ HHH @.

标签:c,visual-c,static-libraries,compatibility,mingw
来源: https://codeday.me/bug/20190925/1817700.html