如何使用Visual C ++ 2010 Express从32位环境编译64位Windows的Qt?

时间:2012-03-03 05:26:03

标签: visual-studio-2010 qt 64-bit visual-studio-express

我正在尝试为64位Windows编译Qt库(我不需要演示或示例)。有说明here但我遇到了下面评论中描述的错误。对于如何进行此过程,似乎没有任何参考。

我的目标是Microsoft Visual C ++ 2010 Express。看起来我也需要Perl和Windows SDK - 我该如何处理这个过程?

2 个答案:

答案 0 :(得分:14)

这个过程非常繁琐且耗时 - 但我会在这里详细解释每一步,以便将来尝试编译Qt的其他人受益。

  1. 第一步是安装所有先决条件。

    • ActivePerl,在配置过程中使用。安装Perl后需要重新启动,因为它修改了环境变量。
    • Windows SDK 7.1(以前称为Platform SDK)。选择要安装的组件时,请务必包含x64库。

  2. Qt Downloads page

  3. 下载Qt源档案
  4. 将存档内容解压缩到易于记忆的位置(如C:\)。您需要稍后记住此位置,因为我们将使用它来设置一些环境变量。

  5. 现在打开Windows SDK 7.1命令提示符。首先将环境设置为32位发布模式(我们需要将一些工具构建为32位应用程序):

    setenv /release /x86
    
  6. 设置以下环境变量(以下示例假定您已解压缩为C:\):

    set QTDIR=C:\qt-everywhere-opensource-src-4.8.0
    set PATH=%PATH%;%QTDIR%\bin
    
  7. 现在运行cd %QTDIR%并指定配置选项 - 示例包含在下面:

    configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff
     -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform
     win32-msvc2010
    
  8. 配置过程完成后,cdsrc目录并运行:

    qmake
    nmake
    

    此过程可能需要相当长的时间,所以现在是休息时间并在Stack Overflow上回答一些问题的好时机:)

  9. 现在构建了这些工具,您需要将Qt编译为64位库。输入以下命令:

    setenv /x64
    

    您需要再次设置步骤5中的环境变量。现在输入这些命令。

  10. 运行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位版本。

  11. 由于一些依赖性问题,现在事情变得非常复杂。 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
    

    可能有更好的方法可以做到这一点,但我还没想出来:)

  12. 现在我们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库并跳过工具依赖项。请注意,这也可能需要相当长的时间。

  13. 您现在应该在lib文件夹中拥有可以在64位Qt应用程序中链接的64位库。


  14. 编辑:事实证明,即使这还不够,因为我在链接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-11445QTBUG-19175

我按照George的指示编译了Qt 4.8.2 64位二进制文​​件,包括OpenSSH库。另外,我应用Microsoft's hotfix来修复编译器错误。

为方便起见,我已从此处下载了生成的64位库:https://www.box.com/s/8948c60c3cdd743ef83b