Qt 5.4 静态构建在 Visual Studio 2013 中产生 "unresolved external symbol" link 错误

Qt 5.4 static build produces "unresolved external symbol" link error in Visual Studio 2013

我想使用 Qt 5.4 的静态构建。由于没有可用的预编译静态构建,您必须自己从 Qt 源代码构建一个。

我的环境如下:

我的程序如下(参见 Qt 文档 > Qt 5.4 > Qt for Windows - 从源代码构建):

所有这些都没有错误地运行。

然后在 Visual Studio 中,我将现有 Qt 项目的 Qt 版本更改为 D:\Qt\qt-5.4.0-x86-msvc2013-compact-static,因为这是上述过程的输出文件夹。

但是,现在我收到大量未解决的以下类型的符号错误(构建配置 "release"):

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)。 (抱歉,我最多只能post 2个链接)

2) 我发现(感谢 karlphillip)如果你在 Visual Studio

中添加一些库到你的附加依赖项中,你可以减少错误消息的数量

这意味着现在有 "only" 55 error messages left。也许还缺少更多的库?

我找到了解决方案:

您必须将以下库添加到 Visual Studio 中的附加依赖项中:

Ws2_32.lib opengl32.lib qtharfbuzzng.lib

然后,我的项目终于编译成功了。

然而,故事还没有结束:

虽然编译成功,但我的应用程序在启动时显示以下错误消息:

This application failed to start because it could not find or load the Qt platform plugin "windows".

要解决这个问题,您必须向附加依赖项添加更多库:

imm32.lib winmm.lib Qt5PlatformSupport.lib qwindows.lib

...以及您的其他图书馆目录中的以下内容:

$(QTDIR)\plugins\platforms

...以及您的源代码中的以下内容:

#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

完成!最后,我能够 link 对抗静态 Qt 库。

值得努力:

我的应用程序的冷启动时间从大约 10 秒显着缩短到不到 1 秒。而不是 14 MB 的 DLL 文件,我只需要部署一个 8 MB 的 EXE 文件。