我想使用Qt 5.4的静态构建。由于没有可用的预编译静态构建,因此您必须自己从Qt源代码构建一个。
我的环境如下:
- 视窗 7 x64
- Visual Studio 2013 Ultimate Update 4
- Qt5 Visual Studio Add-in 1.2.4
- 已安装ActivePerl/ActivePython(构建Qt源代码需要)
我的程序如下(参见Qt 5.4>Qt for Windows>Qt - 从源代码构建的Qt文档):
- 下载 qt-everywhere-opensource-src-5.4.0.zip
- 解压缩到临时文件夹
- 按照此处所述打开命令提示符(基本上,这类似于打开"Visual Studio 命令提示符"并向路径变量添加一些路径)
-
使用以下命令运行配置
configure -c++11 -mp -release -static -nomake tests -nomake examples -prefix D:Qtqt-5.4.0-x86-msvc2013-compact-static -platform win32-msvc2013 -opengl desktop -no-icu -skip webkit
-
运行
nmake
和nmake install
所有这些都没有错误地运行。
然后在Visual Studio中,我将现有Qt项目的Qt版本更改为D:Qtqt-5.4.0-x86-msvc2013-compact-static
,因为这是上述过程的输出文件夹。
但是,现在我收到大量未解决的以下符号错误(构建配置"发布"):
error LNK2001: unresolved external symbol "__imp__glBindTexture@8". Qt5Gui.lib(qopenglfunctions.obj)
...
error LNK2001: unresolved external symbol "_hb_blob_create". Qt5Gui.lib(qharfbuzzng.obj)
...
error LNK2001: unresolved external symbol "_hb_face_create_for_tables". Qt5Gui.lib(qharfbuzzng.obj)
....
error LNK2001: unresolved external symbol "_WSAAsyncSelect@16". Qt5Core.lib(qeventdispatcher_win.obj)
具有类似选项(-platform win32-msvc2013 -opengl desktop -no-icu -skip webkit
)的共享库/动态链接构建工作得很好。
我做错了什么?
1月6日更新:
1)正如评论中已经提到的,这可能是Qt中的一个错误,所以我创建了一个错误报告(QTBUG-43636),后来我发现了一个可能相关的错误(QTBUG-38913)。(对不起,我不能发布不超过2个链接)
2)我发现(感谢karlphillip),如果你在Visual Studio中的其他依赖项中添加一些库,你可以减少错误消息的数量
。-
Ws2_32.lib
解决一条错误消息(共 103 条) -
opengl32.lib
解决了 47 条错误消息
这意味着现在"只"剩下 55 条错误消息。也许还有更多的图书馆缺失?
我找到了解决方案:
您必须将以下库添加到 Visual Studio 中的其他依赖项中:
Ws2_32.lib
opengl32.lib
qtharfbuzzng.lib
然后,我的项目终于编译好了。
然而,这还不是故事的结局:
虽然已成功编译,但我的应用程序在启动时显示以下错误消息:
此应用程序无法启动,因为它找不到或加载Qt平台插件"windows"。
要解决此问题,您必须向其他依赖项添加更多库:
imm32.lib
winmm.lib
Qt5PlatformSupport.lib
qwindows.lib
。以及其他库目录的以下内容:
$(QTDIR)pluginsplatforms
。以及源代码的以下内容:
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
做!最后,我能够链接到静态Qt库。
值得付出努力:
我的应用程序的冷启动时间从大约 10 秒大幅缩短到不到 1 秒。我只需要部署一个 8 MB 的 EXE 文件,而不是 14 MB 的 DLL 文件。