我正在尝试为64位Windows编译Qt库(我不需要演示或示例)。有说明here但我遇到了下面评论中描述的错误。对于如何进行此过程,似乎没有任何参考。
我的目标是Microsoft Visual C ++ 2010 Express。看起来我也需要Perl和Windows SDK - 我该如何处理这个过程?
答案 0 :(得分:14)
这个过程非常繁琐且耗时 - 但我会在这里详细解释每一步,以便将来尝试编译Qt的其他人受益。
第一步是安装所有先决条件。
将存档内容解压缩到易于记忆的位置(如C:\
)。您需要稍后记住此位置,因为我们将使用它来设置一些环境变量。
现在打开Windows SDK 7.1命令提示符。首先将环境设置为32位发布模式(我们需要将一些工具构建为32位应用程序):
setenv /release /x86
设置以下环境变量(以下示例假定您已解压缩为C:\
):
set QTDIR=C:\qt-everywhere-opensource-src-4.8.0
set PATH=%PATH%;%QTDIR%\bin
现在运行cd %QTDIR%
并指定配置选项 - 示例包含在下面:
configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff
-qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform
win32-msvc2010
配置过程完成后,cd
到src
目录并运行:
qmake
nmake
此过程可能需要相当长的时间,所以现在是休息时间并在Stack Overflow上回答一些问题的好时机:)
现在构建了这些工具,您需要将Qt编译为64位库。输入以下命令:
setenv /x64
您需要再次设置步骤5中的环境变量。现在输入这些命令。
运行cd %QTDIR%
,然后重新运行configure
命令,确保指定一个附加选项:
configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform win32-msvc2010 -no-qmake
-no-qmake
选项非常重要 - 它表示我们想跳过qmake.exe
程序的编译,因为我们想保留32位版本。
由于一些依赖性问题,现在事情变得非常复杂。 Qt需要构建核心库的工具(如moc
)和其他一些组件在src.pro
文件中列为依赖项。这意味着编译器将尝试将它们构建为64位应用程序,然后尝试运行它们 - 这当然会在32位系统上失败。所以我们需要做的是编辑src.pro
并自己删除这些依赖项。向下滚动到第85行附近并查找以:
!wince*:!ordered:!symbian-abld:!symbian-sbsv2 {
该部分中的每个后续行都列出了一个子目标及其依赖项。您现在要做的是删除所有以src_tools_
开头的依赖项。例如:
src_gui.depends = src_corelib src_tools_uic
变为:
src_gui.depends = src_corelib
可能有更好的方法可以做到这一点,但我还没想出来:)
现在我们cd
再次进入src
目录并运行以下命令
nmake sub-winmain sub-corelib sub-xml sub-network sub-sql sub-testlib
sub-gui sub-qt3support sub-activeqt sub-opengl sub-xmlpatterns sub-phonon
sub-multimedia sub-svg sub-script sub-declarative sub-webkit
sub-scripttools sub-plugins sub-imports
这将构建仅 Qt库并跳过工具依赖项。请注意,这也可能需要相当长的时间。
您现在应该在lib
文件夹中拥有可以在64位Qt应用程序中链接的64位库。
编辑:事实证明,即使这还不够,因为我在链接QtWebKit4.dll
库时遇到了一些问题(关于未解析的符号)。结果是someone else has already found the solution,您需要在QMAKE_HOST.arch
中将QMAKE_TARGET.arch
更改为WebCore.pro
。
此外,上述选项将构建没有OpenSSL支持的QNetwork4.dll(您将无法通过HTTPS访问网站 - 即使在QWebView中也是如此)。谢天谢地,这并不难解决。下载并构建Win64的OpenSSL并将以下选项附加到步骤#9中的命令:
-openssl -I C:\OpenSSL\inc32 -L C:\OpenSSL\out32dll
(如果您在C:\OpenSSL
以外的地方安装了OpenSSL,则必须更改路径。)
进一步编辑:为了省去自己这样做的麻烦,我已经在这里上传了编译过的库:
http://www.box.com/s/9710cbb278ef4890a7b5
答案 1 :(得分:1)
正如我在对George Edison的回答中提到的那样,Windows SDK 7.1附带的Microsoft Visual C ++编译器中存在一个错误。有关详细信息,请参阅QTBUG-11445和QTBUG-19175。
我按照George的指示编译了Qt 4.8.2 64位二进制文件,包括OpenSSH库。另外,我应用Microsoft's hotfix来修复编译器错误。
为方便起见,我已从此处下载了生成的64位库:https://www.box.com/s/8948c60c3cdd743ef83b