gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:38:56 36 4
gpt4 key购买 nike

我已经用 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 链接器抛出如下错误:

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 个相同的错误涉及从我的应用程序调用的其他函数。

感谢您的建议。

最佳答案

基于您在评论中输入的这个错误:

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

尝试将 extern "C" 放在您的 openssl 包含文件周围。例如:

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

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

关于c++ - 如何在 MSVC 中使用使用 MingW 编译的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529770/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com