Статическая сборка Qt 5.15.2 (MinGW 8.1.0) для Windows 10. Сжатие exe до мин. размера с помощью upx
Запись от 8Observer8 размещена 14.11.2014 в 12:33. Обновил(-а) 8Observer8 06.06.2026 в 17:00
Показов 113866
Комментарии 51
|
Содержание блога Установка статического Qt с помощью mysys2 и pacman Инструкция. Статическая сборка Qt 5.15.2 (MinGW 8.1.0) для Windows 10. Сжатие exe до мин. размера с помощью upx
Я заново собрал Qt 5.15.2 из этих исходников (архив весит 962 MB, а после разархивирования - 3.17 GB). В этот раз сконфигурировалось, собралось и установилось без каких-либо ошибок. Модули "multimedia" и "websockets" работают нормально, а в предыдущей сборке не работали. Поделюсь информацией с какими конфигурациями собирал, сколько заняло времени и сколько весит статический Qt. Конфигурировал следующей командой. Эту команду нужно скопировать в командую строку в корне директории с исходниками. Я, на всякий случай, запускал CMD с правами администратора. Здесь не включены модули Qt3D и QML (см. конфигурацию далее с включёнными модулями Qt3D и QML):
Есть выполнить конфигурацию с включёнными модулями Qt3D и QML:
Далее, после подключения в Qt Creator, собранного Qt, создаём проект, например: https://rextester.com/RJLN8376 main.cpp
и сжимаем EXE с помощью UPX (см. далее). Этот пример включает в себя модули "multimedia" и "opengl" и весит 23.5 MB. Пример создаёт окно, красит его с серый цвет с помощью OpenGL и проигрывает музыкальный файл из ресурсов. Собираем пример в Release и сжимаем собранный Release с помощью UPX:
Инструкция. Статическая сборка Qt 5.4 (MinGW) для Win7. Сжатие exe до мин. размера с помощью upx
Перед тем как научиться собирать приложения в один exe необходимо собрать саму библиотеку Qt статически из исходников. На вашем компьютере будет две версии динамическая (которую вы установили) и статическая. Вы сможете переключаться между этими сборками из Qt Creator Инструментарий: - Версия Qt: Qt 5.4.0 for Windows 32-bit (MinGW 4.9.1, 852 MB) - ОС Win7 Примечание. Предполагается, что у вас есть папка с исходниками Qt. Для того, чтобы она появилась нужно было на этапе установки поставить галочку "Source Components". Либо найти и скачать исходники Qt отдельно - переходим в каталог "C:\Qt\Qt5.4.0\5.4\mingw491_32\mkspecs\w in32-g++" и создаём резервную копию файла "qmake.conf". Например, с именем "qmake.conf Copy" - в файле "qmake.conf" и проводим следующие изменения:
- создаём резервную копию исходников Qt, то есть каталога: C:\Qt\Qt5.4.0\5.4\Src\ - отрываем терминал "Start" -> "All Programs" -> "Qt 5.4.0" -> "5.4" -> "MinGW 4.9 (32 bit)" -> "Qt 5.4.0 for Desktop (MinGW 4.9 32 bit)" - переходим в директорию с исходниками. Для этого вводим команду и нажимаем "Enter":
- производим компиляцию исходников Qt, для этого вводим команду и нажимаем "Enter":
Примечание. В конце построения вылезут следующие ошибки, но вы не обращайте на них внимания: Кликните здесь для просмотра всего текста
- копируем файлы в каталог установки (каталог установки мы указали на этапе конфигурирования C:\Qt\Qt5.4.0_Static), для этого вводим команду и нажимаем "Enter":
Примечание. В конце установки вылезут следующие ошибки, но вы не обращайте на них внимания: Кликните здесь для просмотра всего текста
- удаляем файл C:\Qt\Qt5.4.0\5.4\mingw491_32\mkspecs\wi n32-g++\qmake.conf и восстанавливаем резервный "qmake.conf" - удаляем каталог C:\Qt\Qt5.4.0\5.4\Src и восстанавливаем резервный Регистрируем сборку в Qt Creator статическую сборку. Для этого: - запускаем QtCreator - в меню нажимаем "Tools" -> нажимаем "Options" - слева выбираем "Build & Run", а справа выбираем вкладку "Qt Vertions" - нажимаем кнопку "Add..." и указываем путь до qmake.exe "C:\Qt\Qt5.4.0_Static\bin\qmake.exe" - нажимаем кнопку "Apply" - переходим на вкладку "Kits" и нажимаем кнопку "Add" - в поле "Name" вводим имя Desktop Qt 5.4.0 Static MinGW 32 bit - если поле "Debugger" пусто, то нажимаем кнопку "Manage..." - нажимаем кнопку "Add", вводим название (например gdb) и указываем путь к отладчику "C:\Qt\Qt5.4.0\Tools\mingw49_32\bit\gdb. exe" - нажимаем кнопку "Apply" - возвращаемся на на вкладку "Kits" - в выпадающем списке "Qt versions" выбираем "Desktop Qt 5.4.0 Static MinGW 32 bit" - нажимаем кнопку "OK" Теперь мы можем создать новый проект и указать две сборки при создании: динамическую (для отладчки) и статическую (для использования) Для сборки статической версии приложения нужно: - перед сборкой выбрать Release - открыть файл проекта (*.pro) и добавить строку:
- libgcc_s_dw2-1.dll - libstdc++-6.dll - libwinpthread-1.dll Их можно добавить из каталога: C:\Qt\Qt5.4.0\5.4\mingw491_32\bin В этом случае НЕ НУЖНО писать в pro файле: QMAKE_LFLAGS += -static -static-libgcc Нажмите кнопку "Build" (или Ctrl+B) и вы видите, что полученный exe весит, как минимум 15 МБайт. Мы его можем сжать до 5.5 Мбайт с помощью программы upx:
Прикрепил screenshot примера того, какие библиотеки и плагины нужны для распространения приложения с динамическими библиотеками с использованием модуля Qt3D для Qt 5.15.2 | |||||||||||||||||||||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 51
Комментарии
-
Добавил примечание:
Примечение. При запуске exe из каталога, возможно, придётся добавить три dll:
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
Их можно добавить из каталога: C:\Qt\Qt5.4.0\5.4\mingw491_32\bin
В этом случае НЕ НУЖНО писать в pro файле: QMAKE_LFLAGS += -static -static-libgccЗапись от 8Observer8 размещена 22.04.2015 в 13:07
-
Добавил примечание:
Примечание. Ещё лучше можно сжать с ключом --best
Запись от 8Observer8 размещена 22.04.2015 в 13:10
-
спасибо, очень помог!Запись от SnakeGod размещена 28.04.2015 в 17:18
-
Потому что модуля script нет в конфигурировании:
Сообщение от SnakeGod
configure -static -platform win32-g++ -prefix "C:\Qt\Qt5.4.0_Static" -release -opensource -confirm-license -nomake examples -nomake tests -nomake tools -opengl desktop -no-angle -qt-sql-sqlite -make libs -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype
Возможно его можно подлючить, добавив ключ -script вот так: configure -static -platform -script win32-g++ ...
А может по-другому ключ называется. Нужно ввести команду в консоле configure -help и поискать, какой ключ у этого модуляЗапись от 8Observer8 размещена 28.04.2015 в 17:33
-
Спасибо за статью, но необходима подсказка (google не помог). Ошибка следующая:
после запуска конфигурирования (configure -static ...) появляется ошибка:
minqw32-make: *** [arch.exe] Error 1
Could not find output file 'arch.exe' or 'arch' in C:/Qt/Qt5.4.1/5.4/Src/qtbase/config.tests/arch : No such file or directory
Иди в cd C:/Qt/Qt5.4.1/5.4/Src/qtbase/config.tests/arch
пытаюсь выполнить mingw32-make, появляется ошибка:
makefile:78: recipe for target 'arch.exe' failed
minqw32-make: *** [arch.exe] Error 1
Строки makefile:
77: $(DESTDIR_TARGET): $(OBJECTS)
78: $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS)
Я думал, что проблема в версии qt, сначала пробовал 5.4.1, но в 5.4.0 тоже самое. ОС - Win 7 64 bit.Запись от Klafe размещена 24.05.2015 в 04:19
-
Как ни странно, все получилось. Только на работе, дома пробовал на ноутбуке, на работе стационарный, все на нем скомпилировалось. Затем принес папку домой и все работает. Странно, операционки одинаковые.Запись от Klafe размещена 25.05.2015 в 13:36
-
Все сделал по инструкции при сборки проекта такая ошибка:
Unknown modele(s) in QT:serialport
Что можно сделать?Запись от maxijack размещена 10.11.2015 в 15:19
-
При конфигурировании (то есть в команде configure) перечисляются модули, которые будут собираться в статику. В данной инструкции нет подключения модуля serialport, поэтому при сборке приложения вывелось сообщение "неизвестный модуль serialport". Я не знаю, как включить модуль serialport при конфигурировании. Поищите в интернете. Возможно, нужно просто написать ключ -serialport в команде configure.
Сообщение от maxijack
Запись от 8Observer8 размещена 10.11.2015 в 15:48
-
-serialport не подходит
Сообщение от 8Observer8
в configure -help ничего похожего нет.
А если я найду этот ключ то всю процедуру установки надо заново делать?Запись от maxijack размещена 11.11.2015 в 10:39
-
Запись от Avazart размещена 11.11.2015 в 13:57
-
Нужно сначала найти, как люди подключают serialport при конфигурировании. И да, нужно конфигурировать и заново компилировать Qt. Возможно, что нельзя подключить и нужно отдельно собрать модуль serialport и подключать статические библиотеки к Qt во время сборки приложения. Это только мои догадки. Я с serialport в статику не собирал. Ищите в интернете, как это сделали другие.
Сообщение от maxijack
Запись от 8Observer8 размещена 11.11.2015 в 14:01
-
Кстати, вместо команды "очистить" лучше иметь архив с исходниками Qt. Допустим, нужно пересобрать, тогда лучше просто удалить старую сборку и извлечь из архива новые исходники, чем ждать, когда пройдёт очистка. Тем более, очистка проходит не до конца.Запись от 8Observer8 размещена 11.11.2015 в 14:08
-
Как вызвать команду очистки?Запись от maxijack размещена 11.11.2015 в 14:54
-
А вы не могли бы добавить в сборку поддержку OpenSSL?Запись от Dr.Xank размещена 02.12.2015 в 22:03
-
Очень хорошая статья. Большое спасибо за труд. Помогло.Запись от nick_f1982 размещена 29.04.2016 в 06:14
-
Запись от TanaTiX размещена 15.11.2017 в 15:51
-
Создаётся автоматически, потому что этот путь "C:\Qt\Qt5.4.0_Static" указывается на этапе конфигурирования (когда вводится configure с ключами). Содержимое C:\Qt\Qt5.4.0 не нужно дублировать, все необходимые файлы скопируются сами по указанному пути: "C:\Qt\Qt5.4.0_Static". Нужно отдельно скачать исходники Qt и на всякий случай оставить копию исходников, чтобы в случае неудачи (или при желании добавить новые модули) можно было просто удалить папку и повторить заново: конфигурирование -> компилирование. Не уверен, что эта инструкция актуальна для нового Qt, но для 5.4.0 должна быть актуальна. Запускать команду конфигурирования (configure), а потом компиляцию (mingw32-make) нужно из папки с исходниками Qt, там где лежит makefile, в моём случае это было: C:\Qt\Qt5.4.0\5.4\Src\
Сообщение от TanaTiX
Запись от 8Observer8 размещена 15.11.2017 в 17:30
-
Запись от TanaTiX размещена 15.11.2017 в 20:12
-
Я когда написал эту инструкцию, то специально по ней внимательно сделал, такой ошибки не было. Возможно в версии 5.6, что-то изменили. Я нашёл официальную инструкцию Building a static Qt for Windows using MinGW. Оказывается написали специальный скрипт windows-build-qt-static.ps1 Нужно, чтобы была установлена программа 7-Zip. Как там написано нужно просто скачать скрипт, кликнуть по нему правой кнопкой мыши и выбрать "Run with PowerShell". Скрипт сам скачает исходники, распакует их и произведёт сборку в папку "C:\Qt\Static". Попробуйте и напишите получилось ли.
Сообщение от TanaTiX
Запись от 8Observer8 размещена 15.11.2017 в 20:54
-
Запись от TanaTiX размещена 15.11.2017 в 21:15


