在 Qt 中使用非标准名称链接 lib 文件

Posted

技术标签:

【中文标题】在 Qt 中使用非标准名称链接 lib 文件【英文标题】:Linking a lib file with a non-standard name in Qt 【发布时间】:2018-07-21 03:23:06 【问题描述】:

在 Windows 上,我正在尝试将外部 DLL 添加到我的 Qt 项目中(通过 Qt Creator)。我尝试引用以下生成的工件:

目标/调试/mylib.d 目标/调试/mylib.dll 目标/调试/mylib.dll.d 目标/调试/mylib.dll.lib

添加库/dll 在我的.pro 文件中生成以下条目:

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/target/release/ -lmylib.dll
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/target/debug/ -lmylib.dll

INCLUDEPATH += $$PWD/target/debug
DEPENDPATH += $$PWD/target/debug

Qt 期望“mylib.dll.lib”被命名为“mylib.lib”,因此使用上述配置构建失败并出现错误:

error: LNK1104: cannot open file 'mylib.lib'

如果我将“mylib.dll.lib”重命名为“mylib.lib”,则构建工作正常,但如果可能的话,我宁愿不引入这个额外的步骤。 dll.lib 后缀由 Rust/Cargo 生成,there aren't any plans to allow this to be configured。

在做了一些研究之后,我尝试了几个不同的选项,包括在 PRE_TARGETDEPS 中引用它,但我无法让 LNK1104 错误消失。我错过了什么?

【问题讨论】:

【参考方案1】:

我想通了。诀窍是直接引用文件(即不使用-L / -l 参数),如下所示:

win32:CONFIG(release, debug|release): LIBS += $$PWD/target/release/mylib.dll.lib
else:win32:CONFIG(debug, debug|release): LIBS += $$PWD/target/debug/mylib.dll.lib

win32:CONFIG(release, debug|release): LIBS += $$PWD/target/release/mylib.dll
else:win32:CONFIG(debug, debug|release): LIBS += $$PWD/target/debug/mylib.dll

【讨论】:

以上是关于在 Qt 中使用非标准名称链接 lib 文件的主要内容,如果未能解决你的问题,请参考以下文章

qt链接在lib\libqt5cored.a很慢

gcc 链接非标准名称库

Qt 非静态链接和 .pro 文件

在 Qt 中链接 obj 文件

Qt Creator 链接器错误:LNK1104:无法打开文件“opencv_core249d.lib”

链接 qt lib 错误