Ошибки при сборке Qt 5.6.0 для Visual Studio Community 2015
Я пытался собрать Qt 5.6.0 для использования с сообществом Visual Studio 2015, но документация на их веб-сайте и в вики Qt не очень специфична, когда речь идет о его создании для 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
* Есть ли способ использовать команду configure, чтобы построить только подмножество базовых модулей?
Введите команду для сборки Qt.
nmake
Я получаю эту ошибку, когда пытаюсь ее построить:
D: \ Programs \ qt5> NMAKE Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. cd qtbase\ && (если не существует, Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\qtbase.pro -o Makefile) && nmake -f Makefile Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. cd src\ && (если не существует, Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\src.pro -o Makefile) && nmake -f Makefile Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. cd corelib\ && (если не существует 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), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. nmake -f Makefile.qtzlib.Debug all Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. copy /y ..\..\lib\Qt5Zlibd.dll ..\..\bin Система не может найти указанный файл. nmake -f Makefile.qtzlib.Release all Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. copy /y ..\..\lib\Qt5Zlib.dll ..\..\bin Система не может найти указанный файл. cd tools\bootstrap\ && (если не существует, Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\tools\bootstrap\bootstrap.pro -o Makefile) && nmake -f Makefile Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. nmake -f Makefile.Debug Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0 Авторское право (C) Microsoft Corporation. Все права защищены. 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..\..\3rdparty\zlib -I..\..\..\include -I..\..\..\include\QtCore -I..\..\..\include\QtCore\5.6.1 -I..\..\..\include\QtCore\5.6.1\QtCore -I..\..\..\include\QtXml -I..\..\..\include\QtXml\5.6.1 -I..\..\..\include\QtXml\5.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): ошибка C2220: предупреждение обрабатывается как ошибка - файл объекта не создан (исходный файл компилируется).. \.. \ corelib \ кодеки \ qlatincodec.cpp) d: \ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): предупреждение C4577: "noexcept" используется без указания режима обработки исключений; прекращение при исключении не гарантируется. Укажите /EHsc (компиляция исходного файла..\..\corelib\codecs\qlatincodec.cpp) d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): примечание: для упрощения миграции рассмотрите временное использование флага /Wv:18 с версия компилятора, с которой вы использовали сборку без предупреждений (компиляция исходного файла..\..\corelib\codecs\qlatincodec.cpp) d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): ошибка C2220: предупреждение обрабатывается как ошибка - файл объекта не создан (исходный файл компилируется).. \.. \ corelib \ кодеки \ qutfcodec.cpp) d: \ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): предупреждение C4577: "noexcept" используется без указания режима обработки исключений; прекращение при исключении не гарантируется. Укажите /EHsc (компиляция исходного файла..\..\corelib\codecs\qutfcodec.cpp) d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): примечание: для упрощения миграции рассмотрите временное использование флага /Wv:18 с версия компилятора, с которой вы использовали сборку без предупреждений (компиляция исходного файла..\..\corelib\codecs\qutfcodec.cpp) d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): ошибка C2220: предупреждение обрабатывается как ошибка - файл объекта не создан (исходный файл компилируется).. \.. \ corelib \ кодеки \ qtextcodec.cpp) d: \ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): предупреждение C4577: "noexcept" используется без указания режима обработки исключений; прекращение при исключении не гарантируется. Укажите /EHsc (компиляция исходного файла..\..\corelib\codecs\qtextcodec.cpp) d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): примечание: для упрощения миграции рассмотрите временное использование флага /Wv:18 с версия компилятора, с которой вы использовали сборку без предупреждений (компиляция исходного файла..\..\corelib\codecs\qtextcodec.cpp) NMAKE: фатальная ошибка U1077: '"D:\Programs\ Сообщество Visual Studio 2015 \VC\BIN\amd64\cl.EXE"': код возврата '0x2' Стоп. NMAKE: фатальная ошибка U1077: '"D:\Programs\ Сообщество Visual Studio 2015 \VC\BIN\amd64\nmake.EXE" ": код возврата' 0x2 ' Стоп. NMAKE: фатальная ошибка U1077: "cd": код возврата "0x2" Стоп. NMAKE: фатальная ошибка U1077: "cd": код возврата "0x2" Стоп. NMAKE: фатальная ошибка U1077: "cd": код возврата "0x2" Стоп.
Я пытался найти эту ошибку, чтобы найти исправление, но до сих пор мне не удалось получить много информации об этом вообще.
Любая помощь по этому вопросу будет принята с благодарностью, спасибо.
2 ответа
Это ручное исправление, а не решение само по себе, но если вы посмотрите на сообщение об ошибке, вы увидите это:
cd tools \ bootstrap \ && (если не существует Makefile...
nmake -f Makefile.Debug....
Перейдите в эту папку и откройте файл MakeFile.Debug. Там вы найдете запись под названием CXXFLAGS. Добавьте "/EHsc" в конец и сохраните файл.
Затем просто запустите nmake снова.
Ошибка немного сбивает с толку. Первый
ошибка C2220: предупреждение рассматривается как ошибка - файл объекта не создан
является следующей ошибкой из проблемы, с которой сталкивается Qt. Visual Studio 2015 имеет несколько новых изменений, которые вызывают настоящую проблему:
предупреждение C4577: "noexcept" используется без указания режима обработки исключений
Местное решение также упоминается:
Указать / EHsc
Это то, что делает мое исправление. Он просто указывает компилятору игнорировать некоторые исключения или обрабатывать их по-другому. В этом случае проблема, вероятно, возникает из функции C, которая выдает исключение, но оболочка C++ не обрабатывает ее.
Для получения дополнительной информации, пожалуйста, прочитайте / EH документацию.
Я скомпилировал без проблем (в том числе openssl и mysql). Я понял некоторые моменты:
- Perl-bin должен быть перед Git.
- Используйте Python 2.7 (текущий 3.x потерпит крах).
- Используйте perl init-repository с -f (в противном случае у вас могут быть несовместимые версии)
- Используйте правильные сторонние библиотеки x86 / x64. (Компиляция в командной строке x64 требует использования библиотек x64).
- Ветка
5.7
похоже глючит (проблемы с компиляцией с qt3d). Веткаdev
(с 29 августа 2016 года), кажется, наш друг.