C++ QT 5.7 MSVC 2015静态版本不工作

C++ QT 5.7 MSVC 2015静态版本不工作,c++,windows,qt,static-linking,C++,Windows,Qt,Static Linking,在Windows上使用QT 5.7 MSVC 2015静态版本(32位和64位)时遇到问题。以下是我运行的命令和得到的输出(也用32位测试): 以下是我配置QT静态构建所遵循的步骤: 下载Qt5.7源代码并解压缩到自己的目录 使用QT Creator和msvc2015 32位和64位安装了QT 安装Visual Studio 2015社区,具有所有Visual C++选项 检查过了 已安装草莓Perl 32位并添加到路径 已安装Python 2.7.12并添加到路径 已安装Ruby并添加到路径

在Windows上使用QT 5.7 MSVC 2015静态版本(32位和64位)时遇到问题。以下是我运行的命令和得到的输出(也用32位测试):

以下是我配置QT静态构建所遵循的步骤:

  • 下载Qt5.7源代码并解压缩到自己的目录
  • 使用QT Creator和msvc2015 32位和64位安装了QT
  • 安装Visual Studio 2015社区,具有所有Visual C++选项 检查过了
  • 已安装草莓Perl 32位并添加到路径
  • 已安装Python 2.7.12并添加到路径
  • 已安装Ruby并添加到路径
  • 安装了Windows 10 SDK并选中了安装中的所有选项
  • 已将jom安装到其自己的目录中
  • 下载openssl源代码,并按照构建
  • 将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
    
     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位:

     cd "\Program Files (x86)\Microsoft Visual Studio 14.0\vc"
     vcvarsall.bat amd64
    
     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
    
  • 然后这些:

     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位:

     cd "\Program Files (x86)\Microsoft Visual Studio 14.0\vc"
     vcvarsall.bat x86
    
     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位:

     cd "\Program Files (x86)\Microsoft Visual Studio 14.0\vc"
     vcvarsall.bat amd64
    
     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静态dir重命名为第一个代码段中的名称。我在谷歌上找不到太多东西,所以我在这里发帖希望能有所帮助。谢谢我希望它很简单,就像我遗漏了一个目录来放入path环境变量…

    结果是,问题是我在构建之后重命名了QT静态构建目录,这破坏了它。快速修复:将其重命名为原始的配置-前缀名称。谢谢库巴

    第2步、第7步和第10步是不必要的。您确实需要为32位版本设置MSVC for XP。步骤#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,如果您想要静态运行时,那么是的,将其传递到配置,不要编辑mkspec。
    -static runtime
    的要点就是更改这些设置。弄乱Qt源代码的唯一原因应该是您打算修改代码本身,或者让XP目标生成。Qt5.7不会为没有一个或两个单行程序补丁的XP目标构建。如果它适合你,那么你不是在为XP构建。股票Qt5.7.0是不应该建立XP没有补丁!如果您按照说明进行操作,那么使用相同的命令shell configure和build Qt with XP target,它应该会失败。你应该能够找到补丁,或者如果没有的话,问另一个问题。如果您没有在给定的cmd提示符中运行“从命令行定位”,那么您就不能为XP构建:它不会为XP构建。这适用于Qt本身和您的所有项目。您必须仅从此类shell启动Qt Creator for XP targeting!