По-умолчанию приложение в Qt линкуется динамически с библиотеками Qt, поэтому при распространении приложения необходимо поставлять и множество библиотек Qt.
Но можно собрать приложение в виде одного исполняемого файла, для которого не нужно дополнительных dll-ок.
Для сборки необходимы:
- Qt 5.8.0 с включенными компонентами (если Qt уже был установлен, нужные компоненты можно установить с помощью Qt Maintenance Tool):
Qt — Qt 5.8 — MinGW 5.3.0 32 bit
Qt — Qt 5.8 — Sources
Qt — Tools — MinGW - Perl (Strawberry Perl, к примеру). Я буду использовать strawberry-perl-5.24.1.1-32bit
Проверить (открыв командную строку windows) что путь к исполняемому файлу Perl прописан в переменной окружения PATH. - Python 2 (2.7.5 и выше) — Необходим для сборки QtWebEngine в Qt 5.9.
Путь установки Qt был оставлен по-умолчанию: C:\Qt
Исходники Qt в этом случае будут находиться в директории C:\Qt\5.8\Src
Это не критично, путь может быть любой другой.
Копирую директорию с исходниками (C:\Qt\5.8\Src) в директорию C:\Qt\5.8-static\ (т.е., имеем копию исходников в папке C:\Qt\5.8-static\Src
Все дальнейшие действия производятся в ней.
Создаю директорию C:\Qt\5.8-static\mingw53_32 (в которой будут собраны библиотеки Qt).
Редактирую файл C:\Qt\5.8-static\Src\qtbase\mkspecs\win32-g++\qmake.conf :
В самый конец файла (после строки с load(qt_config)) с новой строки добавляю строки:
QMAKE_LFLAGS += -static -static-libgcc QMAKE_CFLAGS_RELEASE -= O2 DEFINES += UNICODE QT_STATIC_BUILD
Сохраняю.
Открываю командную строку MinGW, там ввожу:
set LANG=en set QT_INSTALL_PREFIX="C:\Qt\5.8-static\mingw53_32" cd /d %QT_INSTALL_PREFIX%\..\Src
И далее
configure.bat -static -debug-and-release -platform win32-g++ -prefix %QT_INSTALL_PREFIX% -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests -qt-sqlite -no-ssl
Тут стоит обратить внимание на опцию -no-ssl — это значит что Qt будет собран без поддежки SSL.
Если никаких ошибок нету, можно продолжать:
mingw32-make -k -j4
— очень длительный процесс.
Опцией -j указывается количество одновременно запущенных копий компилятора. Обычно по количеству ядер процессора.
По завершении процесса, если нету ошибок, делаем:
mingw32-make -k install
В результате получаем статическое окружение в C:\Qt\5.8-static\mingw53_32
Для версии Qt 5.9 просто заменяется 5.8 на 5.9.
Ну и наличие установленного Python2.7.x + пути к python.exe в PATH) — обязательно
«Открываю командную строку MinGW, там ввожу:» Простите за глупость, это как?
Есть такая.
Вы при инсталляции Qt выбирали пунктик «Qt — Qt 5.8 — MinGW 5.3.0 32 bit» ?
Если да, то… В русскоязычной версии Windows:
Пуск -> Все программы -> Qt -> 5.8.0 -> MinGW 5.3.0 (32-bit) -> Qt 5.8.0 for Desktop (MinGW 5.3.0 32 bit)
Для 5.9.* — всё то же самое, только 5.9.х вместо 5.8.х
Либо просто вбив «MinGW» в строке поиска в меню «Пуск».
пробую собрать версию 5.9.1 по вашему сценарию получаю :»D:/Programming/Qt_vs/5.9.1-static/Src/qtbase/qmake/library/qmakebuiltins.cpp:500:104: error: ‘_popen
‘ was not declared in this scope
+ QLatin1String(» && «) + args).toLocal8Bit().constData(), QT_POPEN_
READ)) {
^
D:/Programming/Qt_vs/5.9.1-static/Src/qtbase/qmake/library/qmakebuiltins.cpp:508:32: error: ‘_pclose
‘ was not declared in this scope
int ec = QT_PCLOSE(proc);
^
Makefile:217: recipe for target ‘qmakebuiltins.o’ failed
mingw32-make: *** [qmakebuiltins.o] Error 1»
Вы редактировали ранее qmake.conf, добавляя опции компилятора?
Что говорит (опять же, в командной строке mingw) gcc -v и mingw32-make -v ?
все заработало, косяк был в том что не из командной строки Mingw я это делал , потом вы написали я сделал это из командной строки Mingw и все заработало. СПАСИБО )
Вопрос — как собрать другие компоненты Qt (кроме qtbase)?
Они уже там. Кроме WebEngine.
Vlad, Может Вы подскажете? Пытаюсь делать с Qt5.9.3, на этапе теста конфигурации пишет «Checking for valid makespec… ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.» При этом в логе после перечисления опций конфига сказано:
> Cannot read C:/Program1/Qt/Static5.9.3/src/qtbase/mkspecs/qmake.conf: ?? ??????? ????? ????????? ????.
> Could not read qmake configuration file C:/Program1/Qt/Static5.9.3/src/qtbase/mkspecs/qmake.conf.
> Error processing project file: C:\Program1\Qt\Static5.9.3\src\qtbase\config.tests\verifyspec\verifyspec.pro
Ставлю из C:/Program1/Qt/Static5.9.3/src
Не подскажите куда копать? Ранее собирал статические сборки не особо понимая все свои действия и вот попался…
> Cannot read C:/Program1/Qt/Static5.9.3/src/qtbase/mkspecs/qmake.conf: ?? ??????? ????? ????????? ????.
— судя по количеству знаков «?», там написано «не удается найти указанный файл» ))
qmake.conf по указанному пути там присутствует? 🙂
А какой тулчейн используется? Visual Studio? MinGW?
Использую MinGW. Видимо, забыл указать какие-либо пути, что и вызвало ошибку. Но все стало хорошо после использования батника из http://wohlsoft.ru/pgewiki/Building_static_Qt_5 для «Qt 5.8 and higher» с заменой ключа -shared на -static. Все собралось и верно работает. Отсюда вопросы:
Где можно посмотреть на допустимые ключи/опции команды configure.exe ? У Вас и в указанном батнике они различаются.
Есть опции начигающиеся с -qt-…, или с -no-…, или просто -… В чем разница?
configure.bat -help
По -help будет список всех доступных ключей 🙂 Вот там есть и -qt-* и -no-*
В том батнике у Вас ещё много разных -skip — это для пропуска ненужных (ненужных не для всех 🙂 ) компонентов типа Qt Serial Port, Qt Purchasing, и др., что видно из имени подмодулей \ компонентов после -skip.
Список компонентов, которые можно скипнуть (некоторые зависимы друг от друга), можно найти в файле .gitmodules
Vlad, спасибо!
О хелпе знаю — писал вопрос как раз рассматривая вывод «configure.bat -help » )) Оттуда не следует, что ключ разрешения, например, надо задавать не -pcre, а -qt-pcre, и запрещать -no-pcre . Почему не -make -pcre и -skip -pcre, соответственно? Так понимаю, что для разных компонентов применяются разные способы обозначения? Тогда для кого как ? Вижу -skip -lib… для других -no-lib…, для отдельных компонентов есть режим — auto — по умолчанию они добавляются или исключаются, и если это не устраивает надо прописывать руками.
Конечно это из-за моего незнания Qt. Скорее всего часть параметров взаимозависимы, что накладывает доп.условия при их применении. Пока нигде не нашел ясного указания зависимостей параметров configure. Может .gitmodules поможет. За указание на файлик .gitmodules отдельное спасибо. Он меняется только от версии к версии ?
Qt 5.10.1 — полет нормальный, спасибо автору =)
Не подскажете, как собрать Qt 5.8.0 c MinGW для создания 64-битных приложений в windows?
Увы, никак.
Придется использовать MSVC.
Можно попросить Вас организовать статью с инструкциями по статической сборке qt 5.8.0 с помощью msvc для создания 64-битных приложений? В интернете есть решения, но видимо не совсем корректные и больше для старых версий qt, поэтому приходится бороться с ошибками, а это время.
Спасибо.
Всё собралось, отлично!
Спасибо)
Вроде все нормально, но модуль charts не находит при сборке
Присоединяюсь к вопросу, как charts добавить?
Хорошая инструкция ) На Qt 5.12.5 с MinGW 72_32 опробовано с небольшой корректировкой, всё отлично работает)
Я все по инструкции сделал. Вроде как проблем не возникло. А как дальше быть? Как пользоваться?
Попытался сделать статичную сборку qt 5.13.0 с, соответственно, mingw 7.3.0, цель 1 фейлится. Как исправить? Конец логов тут https://ibb.co/9GdBfqz
Храни тя госоподи братишка, я почти 5 лет кидал эти саные ддлки к ексешнику