Статическая сборка Qt 5.15.2 (MinGW 8.1.0) для Windows 10. Сжатие exe до мин. размера с помощью upx
Запись от 8Observer8 размещена 14.11.2014 в 12:33
Показов 109378
Комментарии 51
|
Содержание блога Установка предустановленного Qt 6 с динамическими библиотеками. В описании к видео есть ссылка на архив с предустановленным Qt и архив со статической сборкой: YouTube: https://www.youtube.com/watch?v=1zOGi43t52Y Rutube: https://rutube.ru/video/814e0b... fb9051528/ Dzen: https://dzen.ru/video/watch/64... 0701ca1b1e Установка статического Qt с помощью mysys2 и pacman Установленный Qt 5.15.2, MinGW 8.1.0, 32bit для Windows
Скачать установленный Qt 5.15.2, MinGW 8.1.0, 32bit для Windows: https://disk.yandex.ru/d/neXKlA9l5DJlQg
Необходимо добавить следующие пути в переменную окружения Path:
Быстро вызвать окно переменных окружения можно следующей командой в cmd.exe или в Far Manager:
Установленный Qt 6.2.0, MinGW 8.1.0, 64bit для Windows
Установленный Qt 6.2.0, MinGW 8.1.0, 64bit для Windows: https://disk.yandex.ru/d/FiDDO5IuAQ4phQ (942 MB - архив, 2.29 GB - в распакованном виде) Статическая сборка Qt 6.2.0 для Release cборок в один EXE: https://disk.yandex.ru/d/nIORLx_JIUnfnw (194 MB - архив, 822 MB - в распакованном виде) В эту сборку включены: QML, Qt3D, QtWebSockets. Собиралось 7-10 часов. Пути для переменной окружения Path:
Настройку надо делать по аналогии с тем, что уже подключено. Из того архива со статикой нужно выставить путь к qmake.exe. Для этого нажать в меню: "Tools" -> "Options..." -> на вкладке слева нажать "Kits" -> на вкладке сверху нажать "Qt Version" -> Нажать кнопку "Add". Чтобы настроить другие инструменты нужно клонировать существующие настройки, а для этого на вкладке сверху "Kits" выбрать одну из настроенных сборок и справа нажать кнопку "Clone". Далее, изменить имя новой клонированной сборки, назначить в выпадающем списке "Qt Version", которую добавили на первом шаге, то есть когда добавили путь к qmake.exe. Папка Qt6.2.0_Static должна лежать в корне диска C, иначе будет сообщение, что профиль Qt не установлен и будет просить выполнить make install Инструкция. Статическая сборка 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
Комментарии
-
Переправил инструкцию под Qt 5.4Запись от 8Observer8 размещена 18.12.2014 в 16:25
-
Вначале инструкции добавил:
- переходим в каталог "C:\Qt\Qt5.4.0\5.4\mingw491_32\mkspecs\w in32-g++" и создаём резервную копию файла "qmake.conf". Например, с именем "qmake.conf Copy"
- создаём резервную копию исходников Qt, то есть каталога: C:\Qt\Qt5.4.0\5.4\Src\
Заменил эти строчки инструкции
- удаляем Qt 5.4 через панел задач
- удаляем папку C:\Qt\Qt5.4.0
- ставим заново Qt
На эти:
- удаляем файл 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 и восстанавливаем резервныйЗапись от 8Observer8 размещена 19.12.2014 в 14:34
-
Добавил в инструкцию, как избавиться от зависимости от библиотек: libgcc_s_dw2-1.dll, libstdc++-6.dll, libwinpthread-1.dllЗапись от 8Observer8 размещена 08.01.2015 в 17:30
-
Такой вопрос а у тебя нет проблем с мультимедия https://www.cyberforum.ru/qt/t... ost7202836 ?Запись от Avazart размещена 08.02.2015 в 21:18
-
Есть. Я не знаю какой флаг нужно ставитьЗапись от 8Observer8 размещена 09.02.2015 в 00:15
-
Вроде, судя по тем сообщениям эти: -audio-backend -wmf-backendЗапись от 8Observer8 размещена 09.02.2015 в 00:17
-
У UPX есть еще флаг --best, сжимает немного лучше чем -9.
Еще есть --brute и --ultra-brute но я их не советую, т.к. большие файлы будут упаковываться ооочень долго, а размер будет не сильно отличаться от --best.Запись от castaway размещена 13.02.2015 в 15:25
-
Запись от Avazart размещена 14.02.2015 в 17:55
-
>Я вообще не стал бы сжимать, в этом нет абсолютно никакого смысла.
>Только дополнительные проблемы, и ругань антивирусов.
Для меня сжатие - это необходимость, так как даже отгрузить 5 МБайт - это проблема. Сжимает upx с 15 до 5 МБайт. У меня usb-модем. Скорость 200 КБит/с. Пока из тех с кем я делился exe никто не жаловался, чтобы антивирус ругался
Говорят, что время запуска повышается, но я не замечалЗапись от 8Observer8 размещена 14.02.2015 в 19:58
-
А что такое 5...15 MБ в наше время?
При сжатии программа занимает меньше места только на диске но не в памяти, в памяти может и больше занимать (из-за необходимости распаковки).
Могут "глушиться" ошибки, к примеру при отсутствии SSL-дллок на компе, не будет окошка с уведомлением об этом- программа будет просто падать и ничего не говорить.Ну и теоретически сжатие может замедлять работу программы.Запись от Avazart размещена 15.02.2015 в 12:20
-
Для меня это очень важно. Я пишу много небольших приложений, которые часто нужно отгружать на Yandex.Disk для передачи кому-либо. У меня очень медленный интернет, поэтому приходится сжимать для передачиЗапись от 8Observer8 размещена 15.02.2015 в 12:29
-
1) У make есть флаг -j, и если написать make -j5 - то прога будет использовать 4-е ядра процессора по максимум, и библиотеки соберутся не за час, а за минут 20.
2) Ошибки которые вы получаете в конце - это потому что ни webkit, ни qml собрать в статику нельзя. То есть статическим может быть только Qt приложение на виджетах.
3) Про upx уже писали. От него больше проблем, чем пользы. Если нужен один файл - то проще в архив закинуть, но тогда и от статики толку 0 =/Запись от RazrFalcon размещена 20.02.2015 в 13:34
-
RazrFalcon
1) 2) - спасибо, проверю при случаи
3) Цифры говорят сами за себя:
Для оконного приложения:
Динамическая сборка
Вес приложения: 44.3 MБайт
После сжания в архив .7z: 12.6 МБайт
Библиотеки:
Кликните здесь для просмотра всего текстаicudt53.dll - 21.6 MБайт
icuin53.dll - 3.8 MБайт
icuuc53.dll - 2.1 MБайт
libgcc_s_dw2-1.dll - 0.1 MБайт
libstdc++-6.dll - 1 MБайт
libwinpthread-1.dll - 0.05 MБайт
Qt5Core.dll - 4.8 MБайт
Qt5Gui.dll - 5.2 MБайт
Qt5Widgets.dll - 6.5 MБайт
platforms/qwindows.dll - 1.3 MБайт
Статическая сборка
Вес приложения: 15 MБайт
После сжатия с помощью upx: 5.6 МБайт
Итог
Динамическая сборка уступает статической на 44.3 - 5.6 = 38.7 MБайт
Но если пользователь скачал ваше динамическое приложение весом 44 MБайта, но потом если вы захотите обновить ему приложение, то нужно будет переслать одно лишь exe весом 0.030 MБайт
Всё продемонстрировал на видео: Создание оконного приложения на С++ (Qt). Запуск приложения на компьютере пользователя в релизеЗапись от 8Observer8 размещена 20.02.2015 в 16:44
-
Добавил в инструкцию примечание:
Примечание. После того, как соберёте по инструкции ниже посмотрите, как использовать сборку на практике: Создание оконного приложения на С++ (Qt). Запуск приложения на компьютере пользователя в релизеЗапись от 8Observer8 размещена 20.02.2015 в 17:08
-
День добрый, интересует такой вопрос: а с использованием Sql приходилось делать динамическую сборку? Или статическую?
Я собрал драйвер для MySql. В папку plugins положил qsqlmysql.dll. Само приложение запускается без проблем. Но потом не может найти драйвер для MySql. Если есть опыт подобной сборки, поделитесь пожалуйста.Запись от Pingvinoff размещена 26.03.2015 в 07:15
-
Я только с SQLite работал. Статически собирается нормально. Для этого при конфигурировании указывают ключ: -qt-sql-sqlite. Для MySql другой ключ нужен. Это можно посмотреть такой командой: configure -help
Для динамической сборки кроме плагина нужно скопировать Qt5Sql.dllЗапись от 8Observer8 размещена 26.03.2015 в 09:18
-
Запись от Avazart размещена 26.03.2015 в 13:57
-
Запись от edw1n размещена 06.04.2015 в 16:13
-
Проверьте в настройках, что указан qmake.exe из статической сборки. Проект перед сборкой нужно переключить на статическую сборку - в Creator'е слева внизу. После настройки заново откройте проект, но перед этим удалите *.pro.user. Я настройку описал в конце инструкции. Перепроверьте в ещё разЗапись от 8Observer8 размещена 06.04.2015 в 16:59
-
Перепроверил. Ничего не изменилось.
Можно я вам на email напишу? Туда скрины скину. Очень нужна помощь с этим.
Ещё заметил такую вещь, что раньше слева на тулбаре были 2 зеленых треугольника, сейчас же их нет. Возможно из-за того что я вчера переустановил Qt.
Во вкладке Qt Versions там где выбрал qmake.exe в самом начале иконка знака восклицания в желтом треугольнике.
upd. Прошу прощения за беспокойство, действительно мой косяк. В инструкции немного неправильно.
У меня было Qt Profiles.Запись от edw1n размещена 06.04.2015 в 17:27


