为 Visual Studio Community 2015 构建 Qt 5.6.0 时出错
Errors when building Qt 5.6.0 for Visual Studio Community 2015
我一直在尝试构建用于 Visual Studio 2015 Community 的 Qt 5.6.0,但是他们网站和 Qt wiki 上的文档在为 Visual Studio。我也尝试过其他教程来构建它,但没有成功。
我试过的教程如下:
https://wiki.qt.io/Building_Qt_5_from_Git
https://doc.qt.io/qt-5/windows-building.html
这些是我在尝试构建它时采取的步骤:
将源代码从 git 仓库克隆到 D:\Programs\qt5.
查看了我想要的分店。在本例中为 5.6.0.
仅克隆了基本模块子集以减少构建时间。
创建了一个批处理脚本来设置cmd会话的环境变量并将其放在D:\Programs\qt5:
REM Set up \Microsoft Visual Studio 2015, where <arch> is \c amd64, \c x86, etc.
CALL "D:\Programs\Visual Studio 2015 Community\VC\vcvarsall.bat" amd64
SET _ROOT=D:\Programs\qt5
SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
REM Uncomment the below line when using a git checkout of the source repository
SET PATH=%_ROOT%\qtrepotools\bin;%PATH%
SET QMAKESPEC=win32-msvc2015
SET _ROOT=
REM When compiling with ICU, uncomment the lines below and change <icupath> appropriately:
REM SET INCLUDE=<icupath>\include;%INCLUDE%
REM SET LIB=<icupath>\lib;%LIB%
REM SET PATH=<icupath>\lib;%PATH%
*尝试删除 SET QMAKESPEC 行,但它没有影响产生的错误。
打开 VS2015 的开发人员命令提示符并导航到 D:\Programs\qt5。
运行4号脚本
输入配置 Qt5 构建的命令。
configure -developer-build -opensource -confirm-license -nomake tests -nomake examples -mp -skip qtwebengine -skip qtwebchannel
*有没有办法使用配置命令只构建基本模块子集?
输入构建Qt的命令
nmake
我在尝试构建它时遇到此错误:
D:\Programs\qt5>nmake
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
cd qtbase\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\qtbase.pro -o Makefile ) && nmake -f Makefile
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
cd src\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\src.pro -o Makefile ) && nmake -f Makefile
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
cd corelib\ && ( if not exist Makefile.qtzlib D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\corelib\qtzlib.pro -o Makefile.qtzlib ) && nmake -f Makefile.qtzlib
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
nmake -f Makefile.qtzlib.Debug all
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
copy /y ..\..\lib\Qt5Zlibd.dll ..\..\bin
The system cannot find the file specified.
nmake -f Makefile.qtzlib.Release all
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
copy /y ..\..\lib\Qt5Zlib.dll ..\..\bin
The system cannot find the file specified.
cd tools\bootstrap\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\tools\bootstrap\bootstrap.pro -o Makefile ) && nmake -f Makefile
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
nmake -f Makefile.Debug
Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.
cl -c -nologo -Zc:wchar_t -FS -Zi -MDd -D_HAS_EXCEPTIONS=0 -MP -GR -W3 -w34100 -w34189 -w44996 -WX /Fd..\..\..\lib\Qt5Bootstrapd.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -DQT_NO_DEPRECATED -DQT_NO_TRANSLATION -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 -DQT_NO_CAST_FROM_ASCII -DQT_BUILD_BOOTSTRAP_LIB -DQT_BUILDING_QT -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_EXCEPTIONS -I. -I..\..rdparty\zlib -I..\..\..\include -I..\..\..\include\QtCore -I..\..\..\include\QtCore.6.1 -I..\..\..\include\QtCore.6.1\QtCore -I..\..\..\include\QtXml -I..\..\..\include\QtXml.6.1 -I..\..\..\include\QtXml.6.1\QtXml -Itmp -I..\..\..\mkspecs\win32-msvc2013 -Fo.obj\debug\ @C:\Users\Justin\AppData\Local\Temp\nm3B49.tmp
qlatincodec.cpp
qtextcodec.cpp
qutfcodec.cpp
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qlatincodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qlatincodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qlatincodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qutfcodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qutfcodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qutfcodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qtextcodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qtextcodec.cpp)
d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qtextcodec.cpp)
NMAKE : fatal error U1077: '"D:\Programs\Visual Studio 2015 Community\VC\BIN\amd64\cl.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"D:\Programs\Visual Studio 2015 Community\VC\BIN\amd64\nmake.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
我曾尝试搜索此错误以找到修复方法,但到目前为止我还无法获得太多有关它的信息。
如能提供有关此主题的任何帮助,我们将不胜感激。
这是手动修复,本身并不是解决方案,但如果您查看错误消息,您会看到:
cd tools\bootstrap\ && ( if not exist Makefile...
nmake -f Makefile.Debug....
转到该文件夹并打开文件 MakeFile.Debug。在那里你会找到一个名为 CXXFLAGS 的条目。将“/EHsc”附加到末尾并保存文件。
然后简单地 运行 nmake 再一次。
错误有点令人困惑。第一个
error C2220: warning treated as error - no 'object' file generated
是 Qt 遇到的问题的后续错误。 Visual Studio 2015 年有一些新的重新设计导致了实际问题:
warning C4577: 'noexcept' used with no exception handling mode specified
本地解决方案也提到了:
Specify /EHsc
这就是我的修复方法。它只是告诉编译器忽略一些异常或以不同方式处理它们。在这种情况下,问题可能出自抛出异常的 C 函数,但 C++ 包装器不处理它。
更多信息请阅读/EH documentation。
我编译没有问题(包括openssl和mysql)。我想出了一些要点:
- Perl-bin 必须在 Git 前面。
- 使用Python 2.7(当前3.x会崩角)
- 使用 perl init-repository 和 -f(否则你的版本可能不一致)
- 使用正确的 x86 / x64 第 3 方库。 (在 x64 命令提示符下编译你必须使用 x64 库)。
- 分支
5.7
似乎有问题(用 qt3d 编译问题)。 Branch dev
(自2016年8月29日起)好像是我们的朋友
我一直在尝试构建用于 Visual Studio 2015 Community 的 Qt 5.6.0,但是他们网站和 Qt wiki 上的文档在为 Visual Studio。我也尝试过其他教程来构建它,但没有成功。
我试过的教程如下:
https://wiki.qt.io/Building_Qt_5_from_Git
https://doc.qt.io/qt-5/windows-building.html
这些是我在尝试构建它时采取的步骤:
将源代码从 git 仓库克隆到 D:\Programs\qt5.
查看了我想要的分店。在本例中为 5.6.0.
仅克隆了基本模块子集以减少构建时间。
创建了一个批处理脚本来设置cmd会话的环境变量并将其放在D:\Programs\qt5:
REM Set up \Microsoft Visual Studio 2015, where <arch> is \c amd64, \c x86, etc. CALL "D:\Programs\Visual Studio 2015 Community\VC\vcvarsall.bat" amd64 SET _ROOT=D:\Programs\qt5 SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% REM Uncomment the below line when using a git checkout of the source repository SET PATH=%_ROOT%\qtrepotools\bin;%PATH% SET QMAKESPEC=win32-msvc2015 SET _ROOT= REM When compiling with ICU, uncomment the lines below and change <icupath> appropriately: REM SET INCLUDE=<icupath>\include;%INCLUDE% REM SET LIB=<icupath>\lib;%LIB% REM SET PATH=<icupath>\lib;%PATH%
*尝试删除 SET QMAKESPEC 行,但它没有影响产生的错误。
打开 VS2015 的开发人员命令提示符并导航到 D:\Programs\qt5。
运行4号脚本
输入配置 Qt5 构建的命令。
configure -developer-build -opensource -confirm-license -nomake tests -nomake examples -mp -skip qtwebengine -skip qtwebchannel
*有没有办法使用配置命令只构建基本模块子集?
输入构建Qt的命令
nmake
我在尝试构建它时遇到此错误:
D:\Programs\qt5>nmake Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. cd qtbase\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\qtbase.pro -o Makefile ) && nmake -f Makefile Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. cd src\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\src.pro -o Makefile ) && nmake -f Makefile Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. cd corelib\ && ( if not exist Makefile.qtzlib D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\corelib\qtzlib.pro -o Makefile.qtzlib ) && nmake -f Makefile.qtzlib Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. nmake -f Makefile.qtzlib.Debug all Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. copy /y ..\..\lib\Qt5Zlibd.dll ..\..\bin The system cannot find the file specified. nmake -f Makefile.qtzlib.Release all Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. copy /y ..\..\lib\Qt5Zlib.dll ..\..\bin The system cannot find the file specified. cd tools\bootstrap\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\tools\bootstrap\bootstrap.pro -o Makefile ) && nmake -f Makefile Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. nmake -f Makefile.Debug Microsoft (R) Program Maintenance Utility Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. cl -c -nologo -Zc:wchar_t -FS -Zi -MDd -D_HAS_EXCEPTIONS=0 -MP -GR -W3 -w34100 -w34189 -w44996 -WX /Fd..\..\..\lib\Qt5Bootstrapd.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -DQT_NO_DEPRECATED -DQT_NO_TRANSLATION -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 -DQT_NO_CAST_FROM_ASCII -DQT_BUILD_BOOTSTRAP_LIB -DQT_BUILDING_QT -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_EXCEPTIONS -I. -I..\..rdparty\zlib -I..\..\..\include -I..\..\..\include\QtCore -I..\..\..\include\QtCore.6.1 -I..\..\..\include\QtCore.6.1\QtCore -I..\..\..\include\QtXml -I..\..\..\include\QtXml.6.1 -I..\..\..\include\QtXml.6.1\QtXml -Itmp -I..\..\..\mkspecs\win32-msvc2013 -Fo.obj\debug\ @C:\Users\Justin\AppData\Local\Temp\nm3B49.tmp qlatincodec.cpp qtextcodec.cpp qutfcodec.cpp d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qlatincodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qlatincodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qlatincodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qutfcodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qutfcodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qutfcodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qtextcodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qtextcodec.cpp) d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qtextcodec.cpp) NMAKE : fatal error U1077: '"D:\Programs\Visual Studio 2015 Community\VC\BIN\amd64\cl.EXE"' : return code '0x2' Stop. NMAKE : fatal error U1077: '"D:\Programs\Visual Studio 2015 Community\VC\BIN\amd64\nmake.EXE"' : return code '0x2' Stop. NMAKE : fatal error U1077: 'cd' : return code '0x2' Stop. NMAKE : fatal error U1077: 'cd' : return code '0x2' Stop. NMAKE : fatal error U1077: 'cd' : return code '0x2' Stop.
我曾尝试搜索此错误以找到修复方法,但到目前为止我还无法获得太多有关它的信息。
如能提供有关此主题的任何帮助,我们将不胜感激。
这是手动修复,本身并不是解决方案,但如果您查看错误消息,您会看到:
cd tools\bootstrap\ && ( if not exist Makefile...
nmake -f Makefile.Debug....
转到该文件夹并打开文件 MakeFile.Debug。在那里你会找到一个名为 CXXFLAGS 的条目。将“/EHsc”附加到末尾并保存文件。
然后简单地 运行 nmake 再一次。
错误有点令人困惑。第一个
error C2220: warning treated as error - no 'object' file generated
是 Qt 遇到的问题的后续错误。 Visual Studio 2015 年有一些新的重新设计导致了实际问题:
warning C4577: 'noexcept' used with no exception handling mode specified
本地解决方案也提到了:
Specify /EHsc
这就是我的修复方法。它只是告诉编译器忽略一些异常或以不同方式处理它们。在这种情况下,问题可能出自抛出异常的 C 函数,但 C++ 包装器不处理它。
更多信息请阅读/EH documentation。
我编译没有问题(包括openssl和mysql)。我想出了一些要点:
- Perl-bin 必须在 Git 前面。
- 使用Python 2.7(当前3.x会崩角)
- 使用 perl init-repository 和 -f(否则你的版本可能不一致)
- 使用正确的 x86 / x64 第 3 方库。 (在 x64 命令提示符下编译你必须使用 x64 库)。
- 分支
5.7
似乎有问题(用 qt3d 编译问题)。 Branchdev
(自2016年8月29日起)好像是我们的朋友