【发布时间】:2015-01-03 21:32:38
【问题描述】:
我想使用 Qt 5.4 的静态版本。由于没有可用的预编译静态构建,您必须自己从 Qt 源代码构建一个。
我的环境如下:
- Windows 7 x64
- Visual Studio 2013 终极更新 4
- Qt5 Visual Studio 插件 1.2.4
- 已安装 ActivePerl / ActivePython(构建 Qt 源代码所需)
我的过程如下(参见 Qt 文档 > Qt 5.4 > Qt for Windows - 从源代码构建):
- 下载qt-everywhere-opensource-src-5.4.0.zip
- 解压到临时文件夹
- 如here 所述打开命令提示符(基本上,这类似于打开“Visual Studio 命令提示符”并向路径变量添加一些路径)
-
使用以下命令运行配置
configure -c++11 -mp -release -static -nomake tests -nomake examples -prefix D:\Qt\qt-5.4.0-x86-msvc2013-compact-static -platform win32-msvc2013 -opengl desktop -no-icu -skip webkit 运行
nmake和nmake install
所有这些都没有错误地运行。
然后在 Visual Studio 中,我将现有 Qt 项目的 Qt 版本更改为 D:\Qt\qt-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) 正如在 cmets 中已经提到的,这可能是 Qt 中的一个错误,所以我创建了一个错误报告 (QTBUG-43636),后来我发现了一个可能相关的错误 (QTBUG- 38913)。 (抱歉,我最多只能发布 2 个链接)
2) 我发现(感谢 karlphillip)如果在 Visual Studio 中将一些库添加到附加依赖项中,可以减少错误消息的数量
-
Ws2_32.lib解决了一条错误消息(共 103 条) -
opengl32.lib解决 47 条错误消息
这意味着现在“只有”55 error messages left。也许还有更多的库丢失?
【问题讨论】:
-
1) 闻起来像 Qt 中的错误。你考虑过reporting it吗? 2) 我自己不是 Windows 专业用户:您确定现在 100% 支持提供前缀路径 / 来运行 make install 吗?
-
网站上写的可以使用prefix和nmake install doc.qt.io/qt-5/windows-building.html 添加imm32.lib winmm.lib Ws2_32.lib 不能解决问题。
-
更新:更准确地说,添加 Ws2_32.lib 实际上解决了 103 错误之一。 (qeventdispatcher_win.obj 中的“_WSAAsyncSelect@16”)当我添加这三个库时,其他 102 个仍然存在。更新 2:现在还有一个bug report。
标签: c++ visual-studio qt linker static-linking