Qt 和静态库文件 - 如何编译

Posted

技术标签:

【中文标题】Qt 和静态库文件 - 如何编译【英文标题】:Qt and static lib files - how to compile 【发布时间】:2013-01-25 15:03:31 【问题描述】:

我需要构建一个 Qt5 64 位程序,该程序链接到静态 .lib 库(使用 /MT 编译)。我尝试将下面的行从 MD 更改为 MT:

QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG      = -Zi –MTd

在文件 D:\Qt\Qt5.0.0src\qtbase\mkspecs\win32-msvc2010\qmake.conf 中

并用重新编译它

configure -prefix %CD%\qtbase -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop

然后nmaking它,但它失败了:

XPathGrammar.cpp
Generating Code...
        lib /NOLOGO  /OUT:release\WebCore.lib @C:\Users\Paul\AppData\Local\Temp\WebCore.lib.4480.3319717.jom
LINK : fatal error LNK1181: cannot open input file '.obj\release_shared\SettingsMacros.obj'
jom: D:\Qt\Qt5.0.0src\qtwebkit\Source\WebCore\Makefile.WebCore.Target.Release [release\WebCore.lib] Error 1181
jom: D:\Qt\Qt5.0.0src\qtwebkit\Source\WebCore\Makefile.WebCore.Target [release] Error 2
jom: D:\Qt\Qt5.0.0src\qtwebkit\Source\WebCore\Makefile.WebCore [sub-Target-pri-make_first-ordered] Error 2
jom: D:\Qt\Qt5.0.0src\qtwebkit\Makefile [sub-Source-WebCore-WebCore-pro-make_first-ordered] Error 2
jom: D:\Qt\Qt5.0.0src\Makefile [module-qtwebkit-make_first] Error 2

似乎没有生成“SettingsMacros.obj”文件。这是为什么呢?

我需要在配置字符串中包含“-static”吗?我知道 Qt doesn't get along with /MT 但我的项目需要它,否则我将无法链接那些 .lib 文件

【问题讨论】:

您希望 qt 库(qtcore 等)是静态的还是已有库? 我有我的 custom_library.lib 文件(其中一些在 C 中),我想静态链接到我的程序中。我尝试将它们作为外部库包含在 Qt Creator 中,但由于 MT/MD 冲突(crt 错误),它给了我链接错误 【参考方案1】:

是的,您确实需要添加-static。为我工作。

【讨论】:

以上是关于Qt 和静态库文件 - 如何编译的主要内容,如果未能解决你的问题,请参考以下文章

如何编译C/Fortran动态/静态链接库

Qt 和静态库文件 - 如何编译

关于Qt程序中动态和静态的几点总结

Qt creator 如何设置静态编译

Qt 5.9.3 如何静态编译和部署?

如何将libqrencode库编译成静态库