【发布时间】:2016-11-16 00:39:08
【问题描述】:
我在 Windows 上使用 32 位和 64 位的 QT 5.7 MSVC 2015 静态版本时遇到问题。这些是我运行的命令和我得到的输出(也用 32 位测试过):
C:\Users\Josh>set PATH=C:\Qt\static\Qt 5.7.0 MSVC2015_Static_x64\bin;%PATH%
C:\Users\Josh>cd "\Users\Josh\Mozy Sync\ReplicatorNew\ReplicatorNew"
C:\Users\Josh\Mozy Sync\ReplicatorNew\ReplicatorNew>qmake ReplicatorNew.pro
Could not find qmake configuration file win32-msvc2015.
Error processing project file: ReplicatorNew.pro
以下是我配置 QT 静态构建的步骤:
- 已下载 QT 5.7 源代码并解压缩到其自己的目录。
- 使用 QT Creator 和 msvc2015 32 和 64 位安装 QT。
- 已安装 Visual Studio 2015 Community 以及所有 Visual C++ 选项 检查。
- 安装了 Strawberry Perl 32 位并添加到路径中。
- 已安装 Python 2.7.12 并添加到路径中。
- 已安装 Ruby 并添加到路径中。
- 已安装 Windows 10 SDK 并检查了安装中的所有选项。
- 已将 jom 安装到其自己的目录中。
- 已下载 openssl 源代码并按照 here 构建。
-
将 qtbase\mkspecs\common\msvc-desktop.conf 编辑为以下内容:
QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd -
运行 32 位:
cd "\Program Files (x86)\Microsoft Visual Studio 14.0\vc" vcvarsall.bat x86 -
这适用于 64 位:
cd "\Program Files (x86)\Microsoft Visual Studio 14.0\vc" vcvarsall.bat amd64 -
然后是这些:
set QMAKESPEC=win32-msvc2015 set QTDIR=C:\Qt\Static\qt-everywhere-enterprise-src-5.7.0\qtbase set PATH=C:\Qt\Static\qt-everywhere-enterprise-src-5.7.0\qtbase\bin;%PATH% cd C:\Qt\Static\qt-everywhere-enterprise-src-5.7.0 -
对于 32 位:
configure -debug-and-release -confirm-license -platform win32-msvc2015 -opengl desktop -static -target xp -nomake examples -no-compile-examples -nomake tests -prefix C:\Qt\static\MSVC2015_Static_x86 -openssl -L C:\OpenSSL-win32\lib -l libeay32 -l ssleay32 -I C:\OpenSSL-win32\include -qt-libpng -qt-libjpeg -qt-zlib -
对于 64 位:
configure -debug-and-release -confirm-license -platform win32-msvc2015 -opengl desktop -static -nomake examples -no-compile-examples -nomake tests -prefix C:\Qt\static\MSVC2015_Static_x64 -openssl -L C:\OpenSSL-win64\lib -l libeay32 -l ssleay32 -I C:\OpenSSL-win64\include -qt-libpng -qt-libjpeg -qt-zlib -
然后运行这些:
C:\Qt\static\jom_1_1_1\jom.exe -j 4 C:\Qt\static\jom_1_1_1\jom.exe -j 4 install
还明确验证了win32-msvc2015在静态构建目录的mkspecs目录下。我将 qt 静态目录重命名为第一个代码 sn-p 中的名称。我在谷歌上找不到很多东西,所以我在这里发帖希望得到帮助。谢谢。我希望这很简单,就像我遗漏了一个目录来放入路径环境变量...
【问题讨论】:
-
步骤 #2、#7 和 #10 是不必要的。对于 32 位版本,您确实需要为 XP Targeting from the Command Line 设置 MSVC。第 13 步第 1-3 行是不必要的。
-
还要确保不要移动 Qt 安装:它不会工作。在 Qt 的
jom install之后,前缀必须保留在原处。确保qmake -query返回正确的路径。还要确保你的.pro文件是健全的:也许先构建一个简单的 Qt 示例。 -
关于您所说的不必要的步骤,我有几个问题:对于第 7 步,如果我们使用 -opengl desktop 或 -opengl dynamic 进行编译,我们是否需要 Windows 10 sdk 中包含的 directx sdk?在第 10 步中,我们是否需要使用参数 -static-runtime 进行配置才能编辑 mkspecs 文件,或者 configure 是否会自动为我们处理这些?
-
也许,但我不记得需要用 MSVC2015 安装它。也许我做过,但我忘记了;在那种情况下,我道歉。至于步骤 #10,如果您想要静态运行时,那么是的,将其传递给配置,不要编辑 mkspecs。
-static-runtime的全部意义在于更改这些设置。弄乱 Qt 源代码的唯一原因应该是您打算修改代码本身,或者要构建 XP 目标。如果没有一两个单行补丁,Qt 5.7 将无法为 XP 目标构建。如果它适合你,那么你就不是为 XP 构建的。 Stock Qt 5.7.0 不应该在没有补丁的情况下为 XP 构建! -
如果您遵循Targeting from the Command Line 的说明,然后从同一个命令shell 配置并使用XP 目标构建Qt,它应该会失败。您应该能够弄清楚补丁,或者如果不问另一个问题。如果您没有在给定的 cmd 提示符下运行“从命令行定位”,那么您无法为 XP 构建:它不适用于 XP。这适用于 Qt 本身和您的所有项目。您必须仅从此类 shell 启动 Qt Creator for XP 目标!
标签: c++ windows qt static-linking