Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/879: Рейтинг темы: голосов - 879, средняя оценка - 4.52
1 / 1 / 1
Регистрация: 06.10.2012
Сообщений: 27

Отучение Qt 5.2.0 от библиотек MinGW и Qt

05.01.2014, 23:31. Показов 174306. Ответов 185
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данная тема уже рассматривалась тут Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll По первому способу у меня не получилось. Может есть какие-то более современные гайды? Мое гугление ничего не дало. Или второй и третий способ с распаковкой исходников от 4.7.4 подойдет для 5.2?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2014, 23:31
Ответы с готовыми решениями:

Отучение Qt 5.2.0 от библиотек
https://www.cyberforum.ru/qt/thread1063918.html, пост Flassie, так вот у меня файл configure в QT 5.4 весит 3 кб и такой строчки там...

Отучение Qt 5.2.0 от библиотек
Привет, форумчане! Недавно установил Qt 5.2.0 на Windows. Столкнулся с проблемой требования кучи библиотек приложениями. Нашёл уже не...

Отлучение Qt 5.3.0 от библиотек MinGW и Qt
Отлучение Qt 5.3.0 от библиотек MinGW и Qt У меня Винда, или ОС Windows 7 64-bit (Ultimatiym) Инструкция по видео Делал все, по...

185
114 / 23 / 0
Регистрация: 28.10.2012
Сообщений: 37
19.07.2016, 12:17
Студворк — интернет-сервис помощи студентам
Уважаемые форумчане уже давно есть статические сборки Qt (на данный момент 5.6.1) в MSYS2 - пользуйтесь на здоровье
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,039
Записей в блоге: 14
19.07.2016, 12:26
Зачем, если можно собрать самим
https://wiki.qt.io/Building_a_... sing_MinGW
0
114 / 23 / 0
Регистрация: 28.10.2012
Сообщений: 37
19.07.2016, 12:29
Хотя бы потому что там проделана огромная работа по фиксу всяких багов сборки для mingw-w64 и различных несостыковок. По крайней мере можете глянуть патчи, может кому из Вас пригодятся.
https://github.com/Alexpux/MIN... qt5-static
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
02.05.2017, 00:06
Здравствуйте. Как я понял версии 5.6 и выше больше не собираются.
Собирал 4.8.7, сталкивался с ошибкой:
Code
1
2
3
4
5
6
7
8
9
10
copy qmake.exe C:\Qt\4.8.7\bin\qmake.exe
        1 file(s) copied.
Creating makefiles in src...
Generating Makefiles...
execute: Unknown error
   (-r)
   (C:/Qt/4.8.7/projects.pro)
   (-o)
   (C:/Qt/4.8.7)
Qmake failed, return code -1
Так и не понял в чём проблема. Добавил -fast в конфигурацию всё заработало.
Убрал ещё webkit. Тоже были ошибки.
0
114 / 23 / 0
Регистрация: 28.10.2012
Сообщений: 37
02.05.2017, 08:00
В MSYS2 репозитории последняя версия Qt-5.8.0, nтак что вы не правы по поводу не собирается. Единственное теперь QtWebkit вынесен в отдельный пакет так как собирается из новой версии.
Qt-4.8.7 давно не собирал - не могу сказать в каком там состоянии все
0
02.05.2017, 10:35

Не по теме:

Цитата Сообщение от Alexpux Посмотреть сообщение
Единственное теперь QtWebkit вынесен в отдельный пакет так как собирается из новой версии.
Заменен на QWebEngine наверное вы хотели сказать.

0
114 / 23 / 0
Регистрация: 28.10.2012
Сообщений: 37
02.05.2017, 11:06
Нет не заменен на QWebEngine. Я сказал все правильно. QWebEngine не собирается с mingw компиляторами
0
02.05.2017, 11:11

Не по теме:

Ну использовать

QtWebkit
не особо хороший выход ибо он хуже открывает сайты.

0
114 / 23 / 0
Регистрация: 28.10.2012
Сообщений: 37
02.05.2017, 11:14
Цитата Сообщение от Avazart Посмотреть сообщение

Не по теме:

Ну использовать не особо хороший выход ибо он хуже открывает сайты.

Собираю новый Webkit, основанный на последних исходниках вебкита. Кстати его поддержку пилит наш соотечественник.
Прошу ознакомиться https://github.com/annulen/webkit/wiki
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
02.05.2017, 23:42
Alexpux, с MSYS2 не знаком.
Я имел ввиду что версии 5.6 и выше не собираются через configure.
Поправьте если я ошибаюсь.
0
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
07.07.2017, 19:00
подтверждаю, несколько дней убил впустую с MSYS2, пытался ставить 5.8 и 5.9 результат такой, что в момент сборки билда выкидывает с ошибками, смотрю логи и просто голова кругом идет сколько там ошибок, а в сети ответов нет
0
114 / 23 / 0
Регистрация: 28.10.2012
Сообщений: 37
15.06.2018, 14:17
В чем проблема взять посмотреть скрипт сборки Qt5 и сделать как нужно: https://github.com/Alexpux/MIN... gw-w64-qt5

Offtopic:
Начиная с версии 5.11 Qt5 для сборки qdoc необходим clang/llvm
0
9035 / 2936 / 493
Регистрация: 05.10.2013
Сообщений: 7,958
Записей в блоге: 216
21.02.2021, 20:42
Я собрал пустое окно в release-статику для Windows. Получился EXE весом 20.6 MB. Я сжал его с помощью upx с ключом -9 (не знаю, что это ключ означает, но так было в каком-то туториале)

E:\_soft\upx-3.96-win32\upx.exe -9 QtStaticProj.exe -o QtStaticProj_out.exe
В результате EXE стал весить 6.98 MB. Не мог бы кто-нибудь скачать и запустить, чтобы я убедился, что я отучил Qt от динамических библиотек MinGW. Ещё я собрал в статику OpenGL приложение, которое выводит кубик. Это приложение получилось весом 21.2 MB, upx сжал его до 7.07 MB. Но мне пришлось использовать ключ --force, потому что upx выдал ошибку:

upx: Cube_OpenGLES20_Qt5Cpp.exe: CantPackException: superfluous data between sections (try --force)
Запустите пример с кубиком тоже. Я добавлю отзыв в репутацию. Я не стал создавать тему, потому что мне достаточно одного теста.

Второе приложение должно вывести кубик на OpenGL ES в 3D:
Название: Cube_OpenGLES20_Qt5Cpp.png
Просмотров: 709

Размер: 3.2 Кб
Вложения
Тип файла: zip QtStaticProjCube_OpenGLES20_Qt5Cpp.zip (7.00 Мб, 20 просмотров)
Тип файла: zip EmptyWindow.zip (6.91 Мб, 15 просмотров)
0
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
21.02.2021, 23:19
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Не мог бы кто-нибудь скачать и запустить
Какой хитрый господин что-то там написал, а ты запускай и тестируй.
Для таких целей обычно разворачивают виртуалку!
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.02.2021, 19:43
8Observer8, работают. Проверил у другана на Win7-64
1
9035 / 2936 / 493
Регистрация: 05.10.2013
Сообщений: 7,958
Записей в блоге: 216
22.02.2021, 20:43
Цитата Сообщение от iSmokeJC Посмотреть сообщение
работают. Проверил у другана на Win7-64
Благодарю! Я очень рад!

Поделюсь дополнительной информацией. 6 лет назад я писал инструкцию: Статическая сборка Qt 5.4 (MinGW) для Win7. Сжатие exe до мин. размера с помощью upx. В инструкции есть такие строки:

Примечание. При запуске exe из каталога, возможно, придётся добавить три dll:
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
Удивительно то, что тогда в инструкции я использовал больше ключей и всё равно мне не удавалось избавить от зависимости от этих библиотек из MinGW. В крайней сборке я вместо этого всего:

QMAKE_LFLAGS += -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
DEFINES += QT_STATIC_BUILD
Написал просто один ключ:

QMAKE_LFLAGS += -static
А при конфигурации я для эксперимента выкинул ряд ключей. В прошлой инструкции были такие настройки:

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
В крайнем случае я использовал такие настройки:

configure -static -platform win32-g++ -prefix "C:\Qt5.15.2_Static" -release -opensource -confirm-license -nomake examples -nomake tests -nomake tools -opengl desktop -no-angle -sql-odbc -sql-sqlite
Надо заметить, что раньше в Qt 5.4.0 для SQLIte использовался флаг "-qt-sql-sqlite", а сейчас для Qt 5.15. 2 используется флаг "-sql-odbc -sql-sqlite"

Несмотря на то, что я сократил настройки, теперь пропала зависимость от трёх указанных выше библиотек из MinGW. Не знаю, связано ли с этим сокращением настроек, но в конце "mingw32-make install" вылезли ошибки, чем и завершилась установка. Возможно, эти ошибки связаны с отсутствием ключей -qt-libpng -qt-libjpeg -qt-freetype, которые требуются для QML, но QML я не использую. Я оставил как есть, для OpenGL + QWidgets - работает и ладно. У меня и так ноутбук запыхался пока в целом, наверное, более 3 часов - извлекал архив, конфигурировал, собирал и устанавливал.

Вот эти ошибки, на которых оборвалась установка после "mingw32-make install", но при этом, как я писал выше, статическая сборка работает.

C:\QtStatic\qt-everywhere-src-5.15.2\qtdeclarative\lib\libQt5Qml.a(Yar rPattern.o):YarrPattern.cpp:(.text$_ZN3J SC4Yarr11YarrPattern7compileERKN3WTF6Str ingEPv+0xbc3): undefined reference to `JSC::Yarr::newlineCreate()' collect2.exe: error: ld returned 1 exit status mingw32-make[4]: *** [Makefile.Release:77: ../../bin/qml.exe] Error 1 mingw32-make[4]: Leaving directory 'C:/QtStatic/qt-everywhere-src-5.15.2/qtdeclarative/tools/qml' mingw32-make[3]: *** [Makefile:55: release-install] Error 2 mingw32-make[3]: Leaving directory 'C:/QtStatic/qt-everywhere-src-5.15.2/qtdeclarative/tools/qml' mingw32-make[2]: *** [Makefile:196: sub-qml-install_subtargets] Error 2 mingw32-make[2]: Leaving directory 'C:/QtStatic/qt-everywhere-src-5.15.2/qtdeclarative/tools' mingw32-make[1]: *** [Makefile:90: sub-tools-install_subtargets] Error 2 mingw32-make[1]: Leaving directory 'C:/QtStatic/qt-everywhere-src-5.15.2/qtdeclarative' mingw32-make: *** [Makefile:355: module-qtdeclarative-install_subtargets] Error 2
Добавлено через 7 минут
Замечу, что даже "mingw32-make" у меня завершился в конце с ошибками после почти 2 часов сборки, но не смотря на этом я потом ввёл команду "mingw32-make install", она завершилась с ошибками и даже не смотря на это в Qt Creator статика настроилась и приложения собираются. Возможно QML не будет собираться. Настройка в Qt Creator у меня в старом мануале выше тоже описана - небольшие есть отличия, что Qt Versions перенесли в Kits из Build & Run, но остальное всё так же.
1
9035 / 2936 / 493
Регистрация: 05.10.2013
Сообщений: 7,958
Записей в блоге: 216
22.02.2021, 21:36
Я сейчас в комментариях к инструкции увидел и вспомнил, что castaway писал, что в MSYS2 (www.msys2.org) добавили статическую сборку Qt "всё включено". Наверное, имеется ввиду, с включением всех модулей Qt в сборку. Но я принципиально в своей инструкции не включал в статику "debug", потому что отлаживать можно и в динамике. Для статики я сделал только "release". Статика для Debug отнимет много места.

Для установки Qt Static нужно открыть MSYS и в командной строке MSYS ввести команду:

pacman -S mingw-w64-x86_64-qt-static
Выводится предупреждение, что Qt займёт столько-то места на жёстком:

Total Download Size: 1037.46 MiB
Total Installed Size: 6391.29 MiB
6 GB - это очень много для меня. У меня сейчас папка Qt Static занимает 263 MB, а динамический pre-built Qt занимает 2.17 GB. Может быть MSYS версия Qt предлагает сборку в статику всего, то есть даже Qt Creator будет в статике и все остальные инструменты, как Qt Linguist, например.

Окно сеанса с MSYS, где я не стал устанавливать Qt Static:



Миниатюра
0
9035 / 2936 / 493
Регистрация: 05.10.2013
Сообщений: 7,958
Записей в блоге: 216
23.03.2021, 01:31
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вот эти ошибки, на которых оборвалась установка после "mingw32-make install", но при этом, как я писал выше, статическая сборка работает.
Я заново собрал Qt 5.15.2 из этих исходников (архив весит 962 MB). В этот раз сконфигурировалось, собралось и установилось без каких-либо ошибок. Модули "multimedia" и "websockets" работают нормально, а в предыдущей сборке не работали. Поделюсь информацией с какими конфигурациями собирал, сколько заняло времени и сколько весит статический Qt.

Конфигурировал командой. Если кто не в курсе, то эту команду нужно скопировать в командую строку в корне директории с исходниками. Я, на всякий случай, запускал CMD с правами администратора:

configure -prefix "C:\Qt5.15.2_Static" -static -static-runtime -release -opensource -confirm-license -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -sql-odbc -sql-sqlite -nomake tools -nomake examples -nomake tests -no-angle -skip qt3d -skip qtcanvas3d -skip qtcanvas3d -skip qtdatavis3d -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip declarative -skip quickcontrols
Конфигурация заняла несколько минут. Далее, команда для сборки:

mingw32-make
Выполнение сборки заняло 4 часа. После сборки папка с исходниками стала весить 1.2 GB. Далее, команда установки, которая скопировала необходимые файлы в папку "C:\Qt5.15.2_Static":

mingw32-make install
Установка длилась 20 минут. После выполнения установки папка с исходниками стала весить 4.20 GB. Папку с исходниками можно удалить. Папка "C:\Qt5.15.2_Static" весит 373 MB.

Далее, после подключения в Qt Creator, собранного Qt, создаём проект, например: https://rextester.com/RJLN8376

main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Add this line to .pro:
// QT += multimedia
// win32: LIBS += -lopengl32
 
#ifdef _WIN32
#include <windows.h>
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
#endif
 
#include <QtWidgets/QApplication>
#include <QtWidgets/QOpenGLWidget>
#include <QtMultimedia/QMediaPlayer>
#include <QtCore/QUrl>
 
class Window : public QOpenGLWidget
{
public:
 
    Window()
    {
        setWindowTitle("Music");
        resize(500, 500);
    }
 
private:
    QMediaPlayer _mediaPlayer;
 
    void initializeGL() override
    {
        glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
        _mediaPlayer.setMedia(QUrl("qrc:/assets/audio/music.wav"));
        _mediaPlayer.play();
    }
 
    void paintGL() override
    {
        glClear(GL_COLOR_BUFFER_BIT);
    }
 
    void resizeGL(int w, int h) override
    {
        glViewport(0, 0, w, h);
    }
};
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}


и сжимаем EXE с помощью UPX (см. далее). Этот пример включает в себя модули "multimedia" и "opengl" и весит 23.5 MB. Пример создаёт окно, красит его с серый цвет с помощью OpenGL и проигрывает музыкальный файл. Собираем пример в Release и сжимаем собранный Release с помощью UPX:

upx.exe --best --force MediaPlayer_Qt5Cpp.exe -o MediaPlayer.exe
Получается EXE весом 7.98 MB:
Вложения
Тип файла: zip MediaPlayer.zip (7.90 Мб, 49 просмотров)
1
9035 / 2936 / 493
Регистрация: 05.10.2013
Сообщений: 7,958
Записей в блоге: 216
17.03.2022, 13:16
Статическая сборка Qt 5.15.2 (MinGW 8.1.0) для Windows 10. Сжатие exe до мин. размера с помощью upx

Установленный 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
  • Вес в распакованном виде: 2.26 ГБайт
  • Вес в архиве: 949 МБайт

Необходимо добавить следующие пути в переменную окружения Path:
  • C:\Qt5\Tools\CMake_64\bin
  • C:\Qt5\5.15.2\mingw81_32\bin
  • C:\Qt5\Tools\mingw810_32\bin

Быстро вызвать окно переменных окружения можно следующей командой в cmd.exe или в Far Manager:

rundll32 sysdm.cpl,EditEnvironmentVariables
Статическая сборка Qt 5.15.2 MinGW 8.1.0 32bit для сборок в Release для Windows. Весит 367 МБайт в распакованном виде. По-моему, я собирал без QML и Qt3D:


Установленный 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:
  • C:\Qt6\6.2.0\mingw81_64\bin
  • C:\Qt6\Tools\mingw810_64\bin
  • C:\Qt6\Tools\CMake_64\bin


Инструкция. Статическая сборка 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):

configure -prefix "C:\Qt\Qt5.15.2_Static" -static -static-runtime -release -opensource -confirm-license -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -sql-odbc -sql-sqlite -nomake tools -nomake examples -nomake tests -no-angle -skip qt3d -skip qtcanvas3d -skip qtcanvas3d -skip qtdatavis3d -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip declarative -skip quickcontrols
Команда для сборки:

mingw32-make
Команда для установки, которая скопирует необходимые файлы в папку "C:\Qt\Qt5.15.2_Static"::

mingw32-make install
Время и занимаемое место на жёстком:
  • Конфигурирование - порядка 5-10 минут
  • Сборка заняла 4 часа. После сборки папка с исходниками стала весить 1.2 GB. Папку с исходниками нужно удалить после сборки
  • Установка заняла 20 минут. Папка "C:\Qt\Qt5.15.2_Static" весит 373 MB

Есть выполнить конфигурацию с включёнными модулями Qt3D и QML:

configure -prefix "C:\Qt\Qt5.15.2_Static" -static -static-runtime -release -opensource -confirm-license -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -sql-odbc -sql-sqlite -nomake tools -nomake examples -nomake tests -no-angle -skip qtwayland -skip qtwebchannel -skip qtwebengine
Время и занимаемое место на жёстком:
  • Конфигурирование - порядка 5-10 минут
  • Сборка заняла 10 с половиной часов. После сборки папка с исходниками стала весить 4.96 GB. Папку с исходниками нужно удалить после сборки
  • Установка заняла 45 минут. Папка "C:\Qt\Qt5.15.2_Static" весит 730 MB

Далее, после подключения в Qt Creator, собранного Qt, создаём проект, например: https://rextester.com/RJLN8376

main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Add this line to .pro:
// QT += multimedia
// win32: LIBS += -lopengl32
 
#ifdef _WIN32
#include <windows.h>
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
#endif
 
#include <QtWidgets/QApplication>
#include <QtWidgets/QOpenGLWidget>
#include <QtMultimedia/QMediaPlayer>
#include <QtCore/QUrl>
 
class Window : public QOpenGLWidget
{
public:
 
    Window()
    {
        setWindowTitle("Music");
        resize(500, 500);
    }
 
private:
    QMediaPlayer _mediaPlayer;
 
    void initializeGL() override
    {
        glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
        _mediaPlayer.setMedia(QUrl("qrc:/assets/audio/music.wav"));
        _mediaPlayer.play();
    }
 
    void paintGL() override
    {
        glClear(GL_COLOR_BUFFER_BIT);
    }
 
    void resizeGL(int w, int h) override
    {
        glViewport(0, 0, w, h);
    }
};
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}


и сжимаем EXE с помощью UPX (см. далее). Этот пример включает в себя модули "multimedia" и "opengl" и весит 23.5 MB. Пример создаёт окно, красит его с серый цвет с помощью OpenGL и проигрывает музыкальный файл из ресурсов. Собираем пример в Release и сжимаем собранный Release с помощью UPX:

upx.exe --best --force MediaPlayer_Qt5Cpp.exe -o MediaPlayer.exe
Получается EXE весом 7.98 MB: MediaPlayer.zip


Инструкция. Статическая сборка 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" и проводим следующие изменения:

QMAKE_LFLAGS += -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
DEFINES += QT_STATIC_BUILD
Примечание. Эти значения я взял из скрипта "windows-build-qt-static.ps1" из этой инструкции: http://qt-project.org/wiki/How... dows-MinGW

- создаём резервную копию исходников 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":

cd C:\Qt\Qt5.4.0\5.4\Src\
- конфигурируем этапы установки, для этого вводим команду и нажимаем "Enter":

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
- ожидаем окончания конфигурирования, примерно, 10 мин. (время зависит от мощности компьютера)

- производим компиляцию исходников Qt, для этого вводим команду и нажимаем "Enter":

mingw32-make
- ожидаем окончания компиляции исходников (на моей машине это заняло 1 час 20 минут)

Примечание. В конце построения вылезут следующие ошибки, но вы не обращайте на них внимания:

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
g++ -c -pipe -fno-keep-inline-dllexport -msse2 -mstackrealign -mfpmath=sse -O2 -
std=c++0x -fno-exceptions -frtti -Wall -Wextra -DUNICODE -DQT_NO_URL_CAST_FROM_S
TRING -DQT_NO_INTEGER_EVENT_COORDINATES -DQT_BUILD_QML_LIB -DQT_BUILDING_QT -D_C
RT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_
WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_D
ISABLE_DEPRECATED_BEFORE=0x040800 -DWTF_EXPORT_PRIVATE= -DJS_EXPORT_PRIVATE= -DW
TFReportAssertionFailure=qmlWTFReportAssertionFailure -DWTFReportBacktrace=qmlWT
FReportBacktrace -DWTFInvokeCrashHook=qmlWTFInvokeCrashHook -DNOMINMAX -DENABLE_
LLINT=0 -DENABLE_DFG_JIT=0 -DENABLE_DFG_JIT_UTILITY_METHODS=1 -DENABLE_JIT_CONST
ANT_BLINDING=0 -DBUILDING_QT__ -DWTF_USE_UDIS86=0 -DNDEBUG -DQT_NO_EXCEPTIONS -D
QT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I'../../include' -I'../../includ
e/QtQml' -I'../../include/QtQml/5.4.0' -I'../../include/QtQml/5.4.0/QtQml' -I'tm
p' -I'compiler' -I'.' -I'../3rdparty/masm/jit' -I'../3rdparty/masm/assembler' -I
'../3rdparty/masm/runtime' -I'../3rdparty/masm/wtf' -I'../3rdparty/masm/stubs' -
I'../3rdparty/masm/stubs/wtf' -I'../3rdparty/masm' -I'../3rdparty/masm/disassemb
ler' -I'../3rdparty/masm/disassembler/udis86' -I'jit' -I'.' -I'jsruntime' -I'.'
-I'../3rdparty/double-conversion' -I'debugger' -I'animations' -I'C:/Qt/Qt5.4.0/5
.4/Src/qtbase/include/QtCore/5.4.0' -I'C:/Qt/Qt5.4.0/5.4/Src/qtbase/include/QtCo
re/5.4.0/QtCore' -I'C:/Qt/Qt5.4.0/5.4/Src/qtbase/include' -I'C:/Qt/Qt5.4.0/5.4/S
rc/qtbase/include/QtNetwork' -I'C:/Qt/Qt5.4.0/5.4/Src/qtbase/include/QtCore' -I'
.moc/release' -I'C:/Qt/Qt5.4.0/5.4/Src/qtbase/mkspecs/win32-g++' -o .obj/release
/YarrJIT.o ../3rdparty/masm/yarr/YarrJIT.cpp
python C:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/src/3rdparty/masm/create_regex_tables
 > RegExpJitTables.h
/c/cygwin64/bin/python: /c/cygwin64/bin/python: cannot execute binary file
Makefile.Release:1093: recipe for target 'RegExpJitTables.h' failed
mingw32-make[4]: *** [RegExpJitTables.h] Error 126
mingw32-make[4]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/src/qml'
 
Makefile:34: recipe for target 'release' failed
mingw32-make[3]: *** [release] Error 2
mingw32-make[3]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/src/qml'
 
Makefile:45: recipe for target 'sub-qml-make_first-ordered' failed
mingw32-make[2]: *** [sub-qml-make_first-ordered] Error 2
mingw32-make[2]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/src'
Makefile:41: recipe for target 'sub-src-make_first' failed
mingw32-make[1]: *** [sub-src-make_first] Error 2
mingw32-make[1]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative'
makefile:217: recipe for target 'module-qtdeclarative-make_first' failed
mingw32-make: *** [module-qtdeclarative-make_first] Error 2
 
C:\Qt\Qt5.4.0\5.4\Src>


- копируем файлы в каталог установки (каталог установки мы указали на этапе конфигурирования C:\Qt\Qt5.4.0_Static), для этого вводим команду и нажимаем "Enter":

mingw32-make install
- ожидаем окончания копирования. Статическая сборка теперь будет храниться в папке C:\Qt\Qt5.4.0_Static

Примечание. В конце установки вылезут следующие ошибки, но вы не обращайте на них внимания:

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
g++ -Wl,--gc-sections -Wl,-s -Wl,-subsystem,console -o ../../bin/qml.exe .obj/re
lease/main.o .obj/release/qml_qml_plugin_import.o .obj/release/qml_plugin_import
.o .obj/release/qrc_qml.o .obj/release/moc_conf.o *-LC:/Qt/Qt5.4.0/5.4/Src/qtdec
larative/lib -LC:/Qt/Qt5.4.0/5.4/Src/qtbase/lib -lQt5Widgets -LC:/Qt/Qt5.4.0/5.4
/Src/qtdeclarative/plugins/qmltooling -lqmldbg_qtquick2 -lQt5Quick -lqmldbg_tcp
-lQt5Qml -LC:/Qt/Qt5.4.0/5.4/Src/qtbase/plugins/bearer -lqgenericbearer -lqnativ
ewifibearer -lQt5Network -ldnsapi -LC:/Qt/Qt5.4.0/5.4/Src/qtbase/plugins/platfor
ms -lqwindows -lwinspool -lshlwapi -lQt5PlatformSupport -LC:/Qt/Qt5.4.0/5.4/Src/
qtbase/plugins/imageformats -lqico -lQt5Gui -lcomdlg32 -loleaut32 -limm32 -lwinm
m -lglu32 -lopengl32 -lgdi32 -lqtharfbuzzng -lQt5Core -lole32 -luuid -lws2_32 -l
advapi32 -lshell32 -luser32 -lkernel32 -lmpr
C:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/lib/libQt5Qml.a(YarrInterpreter.o):YarrInter
preter.cpp:(.text+0x622): undefined reference to `JSC::Yarr::wordcharCreate()'
C:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/lib/libQt5Qml.a(YarrInterpreter.o):YarrInter
preter.cpp:(.text+0x693): undefined reference to `JSC::Yarr::newlineCreate()'
c:/Qt/Qt5.4.0/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../.
./i686-w64-mingw32/bin/ld.exe: C:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/lib/libQt5Qml
.a(YarrInterpreter.o): bad reloc address 0x12 in section `.text$_ZN3WTF15BumpPoi
nterPool6createEj[__ZN3WTF15BumpPointerPool6createEj]'
collect2.exe: error: ld returned 1 exit status
Makefile.Release:86: recipe for target '../../bin/qml.exe' failed
mingw32-make[4]: *** [../../bin/qml.exe] Error 1
mingw32-make[4]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/tools/qm
l'
Makefile:44: recipe for target 'release-install' failed
mingw32-make[3]: *** [release-install] Error 2
mingw32-make[3]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/tools/qm
l'
Makefile:107: recipe for target 'sub-qml-install_subtargets' failed
mingw32-make[2]: *** [sub-qml-install_subtargets] Error 2
mingw32-make[2]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/tools'
Makefile:78: recipe for target 'sub-tools-install_subtargets' failed
mingw32-make[1]: *** [sub-tools-install_subtargets] Error 2
mingw32-make[1]: Leaving directory 'c:/Qt/Qt5.4.0/5.4/Src/qtdeclarative'
makefile:229: recipe for target 'module-qtdeclarative-install_subtargets' failed
 
mingw32-make: *** [module-qtdeclarative-install_subtargets] Error 2
 
C:\Qt\Qt5.4.0\5.4\Src>


- удаляем файл 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) и добавить строку:

Code
1
QMAKE_LFLAGS += -static -static-libgcc
Примечание. При запуске 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

Нажмите кнопку "Build" (или Ctrl+B) и вы видите, что полученный exe весит, как минимум 15 МБайт. Мы его можем сжать до 5.5 Мбайт с помощью программы upx:

upx.exe -9 --force -o ПолноеИмяНовогоФайлаEXE ПолноеИмяСтарогоФайлаExe
Примечание. Ещё лучше можно сжать с ключом --best

upx.exe --best --force -o ПолноеИмяНовогоФайлаEXE ПолноеИмяСтарогоФайлаExe
К примеру, мы собрали статически файл Boxes.exe (15 МБайт). Переименуем его в Boxes1.exe и выполняем команду:
D:\_soft\upx391w\upx391w\upx.exe -9 -o C:\Users\Ivan\GoogleDrive\Qt\Bullet\buil d-Boxes-Desktop_Qt_5_4_MinGW_32bit_Static-Release\release\Boxes.exe C:\Users\Ivan\GoogleDrive\Qt\Bullet\buil d-Boxes-Desktop_Qt_5_4_MinGW_32bit_Static-Release\release\Boxes1.exe
После этой команды будет создан Boxes.exe весом 5.5 МБайт
1
2 / 2 / 3
Регистрация: 13.12.2015
Сообщений: 49
30.07.2022, 12:42
Может кто знает где скачать сборку QT под какой нибудь linux желательно Ubuntu для Raspberry?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2022, 12:42
Помогаю со студенческими работами здесь

Динамическое подключение библиотек C++ MinGW
Импользую VS Code и MinGW. Нужно динамически подключить несколько библиотек. Но при вызове LoadLibrary возникает ошибка identifier...

Ошибка с подключением библиотек iostream.h в MinGW
Помогите разобраться. Не получается подключить библиотеки iostream.h. В среде MinGW 2.1 #include &lt;iostream.h&gt; #include...

Mingw пути включаемых файлов и библиотек по умолчанию
Здравствуйте! Решил попробовать поработать с кросс-платформенным компилятором gcc в Windows. Для этого установил у себя mingw. Простейшая...

MinGW, при установке ошибка: unpacking mingw-get-0.6.2-mingw32-beta-20131004-1-bin.tar.xz
Добрый день, форумчане! Недавно начал изучать Си, решил попрактиковаться. В качестве компилятора не знал какой выбрать (вообще не знаю,...

Может ли MinGW x64 компилить приложения x32? Или нужно для этого отдельно ещё MinGW х32 качать?
Просто решил поиграться с CodeLite.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru