我正在尝试为64位Windows编译Qt库(不需要演示或示例)。这里有链接的说明,但我遇到了下面评论中描述的错误。似乎没有任何参考资料介绍如何进行此过程。
我当前的目标是Microsoft Visual C++ 2010 Express。看起来我还需要Perl和Windows SDK - 我该怎么做?
我正在尝试为64位Windows编译Qt库(不需要演示或示例)。这里有链接的说明,但我遇到了下面评论中描述的错误。似乎没有任何参考资料介绍如何进行此过程。
我当前的目标是Microsoft Visual C++ 2010 Express。看起来我还需要Perl和Windows SDK - 我该怎么做?
这个过程相当繁琐且耗时 - 但为了帮助将来试图编译Qt的其他人,我将在此详细介绍每个步骤。
第一步是安装所有的先决条件。
从Qt下载页面下载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 位库,可以链接到您的 64 位 Qt 应用程序中。
编辑: 结果证明即使如此也不够,因为在连接 QtWebKit4.dll
库时仍然遇到了一些问题(关于未解决的符号)。事实证明,别人已经找到了解决方法,您需要在 WebCore.pro
中将 QMAKE_HOST.arch
更改为 QMAKE_TARGET.arch
。
此外,上述选项将构建没有 OpenSSL 支持的 QNetwork4.dll(您将无法访问 HTTPS 站点-即使在 QWebView 中)。幸运的是,修复起来并不太难。下载并编译 OpenSSL(Win64),并将以下选项附加到步骤#9中的命令:
-openssl -I C:\OpenSSL\inc32 -L C:\OpenSSL\out32dll
(如果您将 OpenSSL 安装在 C:\OpenSSL
以外的其他位置,则需要更改路径。)
进一步编辑:为了方便起见,我已经将编译好的库上传到此处:
http://www.box.com/s/9710cbb278ef4890a7b5
正如我在对George Edison的回答中所提到的评论中,Windows SDK 7.1附带的Microsoft Visual C++编译器存在一个错误。有关此信息,请参见QTBUG-11445和QTBUG-19175。
我按照George的说明编译了Qt 4.8.2 64位二进制文件,包括OpenSSH库。此外,我还应用了Microsoft的热修复程序来修复编译器错误。
为了方便您,我已经将生成的64位库提供下载,链接在这里:https://www.box.com/s/8948c60c3cdd743ef83b