我用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 @.