LNK 2019 错误:Qt 项目在 MINGW 中工作,而不是在 MSVC 中工作

LNK 2019 Error: Qt Project works in MINGW, not in MSVC

提问人:Andres Salas 提问时间:6/19/2020 更新时间:6/19/2020 访问量:174

问:

我有一个包含多个链接库的项目。一个特定的库链接到另一个库并调用一个符号,链接器声称该符号是未定义的。

我已经链接到在 .pro 文件中应该有这个符号的库,如下所示:

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../SourceLibrary/release/ -lSourceLibrary
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../SourceLibrary/debug/ -lSourceLibrary
else:unix: LIBS += -L$$OUT_PWD/../SourceLibrary/ -lSourceLibrary

INCLUDEPATH += $$PWD/../SourceLibrary
DEPENDPATH += $$PWD/../SourceLibrary

这使用 MINGW 正确链接,所以我不担心库名称或函数定义/声明中的拼写错误。

在 Dependencies 中检查了 SourceLibrary 后,我注意到所需的符号确实不存在

这导致我检查了 SourceLibrary 的 Makefile,但是具有所需符号的文件似乎以与其他具有符号的文件相同的方式引用。

我还检查了应该包含带有 dumpbin 的符号的中间 .obj 文件,该文件确实有这些符号,并且与链接器错误报告具有相同的修改。

使用 dumpbin /ALL 的进一步调查显示,这些符号位于 SourceLibrary.dll 文件中,与依赖项以及链接器错误相矛盾。

总之,我不明白为什么链接器和依赖项都看不到应该在库中的符号。我怀疑 MSVC/MINGW 编译器存在差异,但显然目前只有怀疑。

Qt Visual-C++ mingw 链接器错误

评论

1赞 Brecht Sanders 6/19/2020
MSVC 和 MinGW 导出/导入符号的方式之间肯定存在差异。首先,MinGW 使用 .a 文件,MSVC 使用 .lib 文件与库链接。如果要将 MinGW 生成的 DLL 文件与 MSVC 一起使用,则可能应先创建一个 .lib 文件。
0赞 Andres Salas 6/19/2020
@BrechtSanders我应该澄清一下,我正在使用 MSVC 与我的 MINGW 构建分开构建项目,而不是尝试在 MSVC 中使用 MINGW 中的库。
1赞 Brecht Sanders 6/19/2020
项目的头文件是否需要为共享库定义某种编译器才能使用 dllexport?
0赞 Andres Salas 6/20/2020
结果是这样的。经过进一步研究,我的问题得到了以下答案:stackoverflow.com/a/12574423
0赞 Andres Salas 6/20/2020
我应该采取什么流程?用另一个链接来回答这个问题感觉很奇怪,这应该被标记为重复吗?

答: 暂无答案