Qt

Статическая сборка Qt 5.12 из исходников под Windows

Потребовалось мне тут, что бы Qt приложение было в одном exe.  Для этого придётся перекомпилировать Qt.

Качаем: Git

Качаем: Perl, версию 32х битную.

Качаем: Python 2 (У меня 2.7).

Качаем: MinGW, y меня 730 (для распаковки нужен 7Zip, запускать «C:\Programm Files (x86)\7-Zip\7zFM.exe»).

Открываем консольку (Win+R, вводим cmd), прописываем необходимые системные переменные (пути замените на свои):

set PATH=C:\MinGW\mingw730_32\bin\;%PATH%
set PATH=C:\Strawberry\perl\bin\;%PATH%

Переходим в папку, в которой будем развлекаться, качаем исходники Qt:

cd C:/QtStatic
git clone https://github.com/qt/qt5
cd qt5
perl init-repository

Конфигурируем:

configure -opensource -confirm-license -platform win32-g++ -static -release -opengl desktop -qt-zlib -qt-libpng -qt-libjpeg -nomake examples
[tip]В конфиге не включён SSL, кому нужно:
Качаем и ставим Win32OpenSSLLite
-openssl -I «c:\Qt\3dparty\openssl-1.0.2m\include» -L «c:\Qt\3dparty\openssl-1.0.2m»
[/tip] [tip] Если вдруг нужно переконфигурировать и пересобрать, то нужно сначала очистить результаты предыдущих потуг:
 git submodule foreach --recursive "git clean -dfx" 
 git clean -dfx
[/tip]

Собираем (Часа 4) и ставим:

mingw32-make -j4
mingw32-make install

После установки настраиваем QtCreator для использования новой версии фреймворка:

В верхней менюшке Инструменты -> Параметры -> Сборка и запуск

Компиляторы -> Добавить
MinGW -> C++
Название: Qt 5.12 Static MinGW
Путь: C:\MinGW\mingw730_32\bin\c++.exe

Отладчики -> Добавить
Название: Qt 5.12 Static DBG
Путь: C:\MinGW\mingw730_32\bin\gdb.exe

Профили Qt -> Добавить
Название: Qt 5.12 Static
Путь: C:\QtStatic\qt5\qtbase\bin\qmake.exe

Комплекты -> Добавить
Название: Qt 5.12 Static
Тип устройства: Desktop
Компилятор C++: Qt 5.12 Static MinGW
Отладчик: Qt 5.12 Static DBG
Профиль Qt: Qt 5.12 Static

 Нажимаем «Применить».

Можно попробовать сделать простенький проект. В параметрах сборки и запуска поставьте «Release» т.к. мы только эту версию собрали. Так же в «*.pro» файл необходимо добавить указание на статическую сборку и линковку libGCC.

QMAKE_LFLAGS += -static -static-libgcc

Ну вот, как-то так =)

Related posts

Упрощение работы с динамическими структурами в C++

Вывести время компиляции исходников __TIMESTAMP__ в виде Unix timestamp в C(C++)

QML DropArea for files

19 комментариев

Джо 5 марта 2024 - 0:59
Не работает: [1/12299] Running syncqt.cpp for module: QtZlib FAILED: qtbase/src/3rdparty/zlib/ZlibPrivate_syncqt_timestamp B:/Qt/src/qt5/qtbase/src/3rdparty/zlib/ZlibPrivate_syncqt_timestamp cmd.exe /C "cd /D B:\Qt\src\qt5\qtbase\src\3rdparty\zlib && B:\Qt\src\qt5\qtbase\bin\syncqt.exe @B:/Qt/src/qt5/qtbase/src/3rdparty/zlib/ZlibPrivate_syncqt_args && B:\CodeBlocks\gcc-13.2.0-64bit\bin\cmake.exe -E touch B:/Qt/src/qt5/qtbase/src/3rdparty/zlib/ZlibPrivate_syncqt_timestamp"
EugineM 15 марта 2023 - 15:13
Потверждаю, после команды "perl init-repository" Скачивает и требует верификации на github, после неудачной попытки выпадает в ошибку Mesa: mesa-21.3.8 remote: Repository not found. fatal: repository 'https://github.com/qt/qtgrpc.git/' not found git clone --no-checkout https://github.com/qt/qtgrpc.git qtgrpc exited with status 32768 at init-repository line 207. Qt::InitRepository::exe(Qt::InitRepository=HASH(0x66b3d4), "git", "clone", "--no-checkout", "https://github.com/qt/qtgrpc.git", "qtgrpc") called at init-repository line 560 Qt::InitRepository::git_clone_one_submodule(Qt::InitRepository=HASH(0x66b3d4), "qtgrpc", "qtgrpc.git", 0, "") called at init-repository line 430 Qt::InitRepository::git_clone_all_submodules(Qt::InitRepository=HASH(0x66b3d4), "qt5", 0, "", "preview", "essential", "addon", "deprecated") called at init-repository line 677 Qt::InitRepository::run(Qt::InitRepository=HASH(0x66b3d4)) called at init-repository line 688 C:\QtStatic\qt5>
Pavelk 20 марта 2023 - 0:12
Попробуйте клонировать с git://code.qt.io/qt/qt5.git
Андрей 11 января 2021 - 21:32
Важно заметить, что git submodule foreach --recursive "git clean -dfx" git clean -dfx нужно запускать из-под папки с исходниками, то есть ещё нужно cd ../qt5 потому что когда файл конфигурации или сборки, пользователь уже в папке build
Николай 17 мая 2020 - 15:10
"Авторизация при простом скачивании не требуется. Вы что-то не так делаете. Огласите код ошибки хотя бы." Наверное это был какой-то глюк с авторизацией.Была проблема с питоном,надо его тоже добавить в переменные среды.Но сейчас проблема при компиляции ,error 2.mingw32-make[1]: *** [Makefile:52: sub-src-make_first] Error 2 mingw32-make[1]: Leaving directory 'C:/QtStatic/qt5/qttools' mingw32-make: *** [Makefile:426: module-qttools-make_first] Error 2 И при установке тоже error 2. mingw32-make[6]: Leaving directory 'C:/QtStatic/qt5/qtquick3d/src/plugins/assetimporters/assimp' mingw32-make[5]: *** [Makefile:55: release-install] Error 2 mingw32-make[5]: Leaving directory 'C:/QtStatic/qt5/qtquick3d/src/plugins/assetimporters/assimp' mingw32-make[4]: *** [Makefile:88: sub-assimp-install_subtargets] Error 2 mingw32-make[4]: Leaving directory 'C:/QtStatic/qt5/qtquick3d/src/plugins/assetimporters' mingw32-make[3]: *** [Makefile:62: sub-assetimporters-install_subtargets] Error 2 mingw32-make[3]: Leaving directory 'C:/QtStatic/qt5/qtquick3d/src/plugins' mingw32-make[2]: *** [Makefile:209: sub-plugins-install_subtargets-ordered] Error 2 mingw32-make[2]: Leaving directory 'C:/QtStatic/qt5/qtquick3d/src' mingw32-make[1]: *** [Makefile:65: sub-src-install_subtargets] Error 2 mingw32-make[1]: Leaving directory 'C:/QtStatic/qt5/qtquick3d' mingw32-make: *** [Makefile:283: module-qtquick3d-install_subtargets] Error 2
клевер 15 мая 2020 - 17:55
библиотеки openssl поставились в папку C:\OpenSSL-Win32\bin, в qt нет ничего, хотя бы отдалённо напоминающее "3dparty". подскажете, какой путь нужно прописать после -openssl -I ?
Pavelk 16 мая 2020 - 3:55
Доброго дня. Попробуйте скачать не "Light", а полный и переустановить. Если не заработает - пробовать ставить родной от Qt через его диспетчер обновлений (В папке с установленным Qt, называется вроде "MaintanceTool"). Будет лежать в папке "Qt\Tools\OpenSSL\Win_x86\".
Николай 10 мая 2020 - 20:30
Не работает, в процессе конфигурации, после длительного скачивания каких-то файлов ,вдруг потребовал авторизации на гитхабе,не нашел какой-то файл, и остановился.И процесс сборки не идет,сразу же ошибка .
Pavelk 16 мая 2020 - 3:59
Авторизация при простом скачивании не требуется. Вы что-то не так делаете. Огласите код ошибки хотя бы.
Александр 3 мая 2020 - 0:04
Здравствуйте. Павел! Объясните ,пожалуйста, как собрать dll-ку на статике. Хочу собрать dll без зависимостей. Но когда собираю в статической сборке то получаются 2 файла с расширением .a и .o А dll-ки нет.
Сергей 2 января 2020 - 11:05
Спасибо за инструкцию, только вопрос как подключить QCharts в эту сборку?
Pavelk 2 января 2020 - 18:27
Пожалуйста. К сожалению, я с ними дела пока что не имел, так что подробно подсказать не могу. Скорее всего нужно просто собрать.
Сергей 1 января 2020 - 18:23
Спасибо за такую подробную инструкцию, только появился вопрос! А как добавить библиотеку QCharts в статистическую сборку? Или есть другая хорошая библиотека?
Артур 17 ноября 2019 - 11:00
Все прошло на ура. Огромное спасибо. Осталось пара вопросов которые решал методом тыка... 1. Все предустанавлеваемые сервисы имеют 32 и 64 разрядную структуру. win у меня 64, гит уже стоял 64, остальное ставил 32 битное. Это имело смысл или ставить можно что попапо кроме Перла (указана битность)? 2. У меся стоял питон 3, я снес и поставил 2.7 х 32х. Если бы оставил 3 - что то пошло бы не так? 3. С подключением SSL не очень понятно - команда ссылается на несуществующие каталоги c:\Qt\3dparty; c:\Qt\3dparty\openssl-1.0.2m ...? Что там следует прописать если установка была по умолчание в c:\Program Files (x86)\OpenSSL-Win32\ и про битность соответственно. 4. Главное. Какую конфигурацию ставить креатора? как я понимаю достаточно самой минимальной? У меня SSd и места совсем мало... Какие пункты оставить при выборе?
Pavelk 21 ноября 2019 - 3:32
Пожалуйста. 1. Если компилятор будет 64х битный, то и все exe шники будут 64 битными. 2. С Питон 3 просто не соберётся 3. Попытаться найти в исходниках Qt где эти папки теперь, т.к. по всей видимости я по старой памяти прописал. Либа OpenSSL должна быть той же разрядности, что и компилятор. 4. У QtCreator вроде бы нет конфигураций разных - он идёт одним пакетом, всё остальное - разные компиляторы и т.д., т.е. выбираете при установке только его, если я Вас правильно понял.
Rovshan Gurbanov 2 ноября 2019 - 9:20
Здравствуйте. Павел! Я не силен в этом деле, но мне очень нужно сделать эту сборку. Мучаюсь уже второй день. Можно ли как-то без скачивания исходников с интернета это сделать? У меня плохой интернет. 7z архив с исходниками имеется. Помогите, пожалуйста!
Pavelk 3 ноября 2019 - 1:42
Доброго дня. К сожалению, ничем больше помочь не могу т.к. буквально недавно пересобирал так же, как в посту написано - всё получилось.
Я_ли? 10 сентября 2019 - 22:57
Здравствуйте. Павел! Объясните ,пожалуйста, зачем для сборки библиотеки Qt5.12 Git, Perl и Python? И зачем скачивать отдельно компилятор, если он есть в самой библиотеке, в принципе как и python2.7?
Pavelk 9 октября 2019 - 4:47
Здравствуйте. Git - качает исходники грубо говоря. Perl и Python используются при конфигурации. В данном посте установка идёт именно из исходников, т.е. как таковой самого "фреймворка" то ещё нет - его нужно собрать.
Add Comment