С Новым годом! Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль

Статическая сборка Qt 5.15.2 (MinGW 8.1.0) для Windows 10. Сжатие exe до мин. размера с помощью upx

Запись от 8Observer8 размещена 14.11.2014 в 12:33
Показов 109378 Комментарии 51
Метки c++, qt

Содержание блога

Установка предустановленного 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
  • Вес в распакованном виде: 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


Настройку надо делать по аналогии с тем, что уже подключено. Из того архива со статикой нужно выставить путь к 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):

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 МБайт


Прикрепил screenshot примера того, какие библиотеки и плагины нужны для распространения приложения с динамическими библиотеками с использованием модуля Qt3D для Qt 5.15.2
Миниатюры
Нажмите на изображение для увеличения
Название: Qt3D_DLLs.png
Просмотров: 839
Размер:	7.2 Кб
ID:	7435  
Вложения
Тип файла: rar Qt5.15.2_Static.part01.rar (25.00 Мб, 2350 просмотров)
Тип файла: rar Qt5.15.2_Static.part02.rar (25.00 Мб, 2813 просмотров)
Тип файла: rar Qt5.15.2_Static.part03.rar (25.00 Мб, 1996 просмотров)
Тип файла: rar Qt5.15.2_Static.part04.rar (24.04 Мб, 1655 просмотров)
Метки c++, qt
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 51
Комментарии
  1. Старый комментарий
    Переправил инструкцию под Qt 5.4
    Запись от 8Observer8 размещена 18.12.2014 в 16:25 8Observer8 вне форума
  2. Старый комментарий
    Вначале инструкции добавил:

    - переходим в каталог "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 8Observer8 вне форума
  3. Старый комментарий
    Добавил в инструкцию, как избавиться от зависимости от библиотек: libgcc_s_dw2-1.dll, libstdc++-6.dll, libwinpthread-1.dll
    Запись от 8Observer8 размещена 08.01.2015 в 17:30 8Observer8 вне форума
  4. Старый комментарий
    Аватар для Avazart
    Такой вопрос а у тебя нет проблем с мультимедия https://www.cyberforum.ru/qt/t... ost7202836 ?
    Запись от Avazart размещена 08.02.2015 в 21:18 Avazart вне форума
  5. Старый комментарий
    Есть. Я не знаю какой флаг нужно ставить
    Запись от 8Observer8 размещена 09.02.2015 в 00:15 8Observer8 вне форума
  6. Старый комментарий
    Вроде, судя по тем сообщениям эти: -audio-backend -wmf-backend
    Запись от 8Observer8 размещена 09.02.2015 в 00:17 8Observer8 вне форума
  7. Старый комментарий
    У UPX есть еще флаг --best, сжимает немного лучше чем -9.
    Еще есть --brute и --ultra-brute но я их не советую, т.к. большие файлы будут упаковываться ооочень долго, а размер будет не сильно отличаться от --best.
    Запись от castaway размещена 13.02.2015 в 15:25 castaway вне форума
  8. Старый комментарий
    Аватар для Avazart
    Я вообще не стал бы сжимать, в этом нет абсолютно никакого смысла.
    Только дополнительные проблемы, и ругань антивирусов.
    Запись от Avazart размещена 14.02.2015 в 17:55 Avazart вне форума
  9. Старый комментарий
    >Я вообще не стал бы сжимать, в этом нет абсолютно никакого смысла.
    >Только дополнительные проблемы, и ругань антивирусов.
    Для меня сжатие - это необходимость, так как даже отгрузить 5 МБайт - это проблема. Сжимает upx с 15 до 5 МБайт. У меня usb-модем. Скорость 200 КБит/с. Пока из тех с кем я делился exe никто не жаловался, чтобы антивирус ругался

    Говорят, что время запуска повышается, но я не замечал
    Запись от 8Observer8 размещена 14.02.2015 в 19:58 8Observer8 вне форума
  10. Старый комментарий
    Аватар для Avazart
    Для меня сжатие - это необходимость, так как даже отгрузить 5 МБайт - это проблема. Сжимает upx с 15 до 5 МБайт. У меня usb-модем. Скорость 200 КБит/с. Пока из тех с кем я делился exe никто не жаловался, чтобы антивирус ругался
    А что такое 5...15 MБ в наше время?
    При сжатии программа занимает меньше места только на диске но не в памяти, в памяти может и больше занимать (из-за необходимости распаковки).
    Могут "глушиться" ошибки, к примеру при отсутствии SSL-дллок на компе, не будет окошка с уведомлением об этом- программа будет просто падать и ничего не говорить.Ну и теоретически сжатие может замедлять работу программы.
    Запись от Avazart размещена 15.02.2015 в 12:20 Avazart вне форума
  11. Старый комментарий
    А что такое 5...15 MБ в наше время?
    Для меня это очень важно. Я пишу много небольших приложений, которые часто нужно отгружать на Yandex.Disk для передачи кому-либо. У меня очень медленный интернет, поэтому приходится сжимать для передачи
    Запись от 8Observer8 размещена 15.02.2015 в 12:29 8Observer8 вне форума
  12. Старый комментарий
    Аватар для RazrFalcon
    1) У make есть флаг -j, и если написать make -j5 - то прога будет использовать 4-е ядра процессора по максимум, и библиотеки соберутся не за час, а за минут 20.
    2) Ошибки которые вы получаете в конце - это потому что ни webkit, ни qml собрать в статику нельзя. То есть статическим может быть только Qt приложение на виджетах.
    3) Про upx уже писали. От него больше проблем, чем пользы. Если нужен один файл - то проще в архив закинуть, но тогда и от статики толку 0 =/
    Запись от RazrFalcon размещена 20.02.2015 в 13:34 RazrFalcon вне форума
  13. Старый комментарий
    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 8Observer8 вне форума
  14. Старый комментарий
    Добавил в инструкцию примечание:

    Примечание. После того, как соберёте по инструкции ниже посмотрите, как использовать сборку на практике: Создание оконного приложения на С++ (Qt). Запуск приложения на компьютере пользователя в релизе
    Запись от 8Observer8 размещена 20.02.2015 в 17:08 8Observer8 вне форума
  15. Старый комментарий
    Аватар для Pingvinoff
    День добрый, интересует такой вопрос: а с использованием Sql приходилось делать динамическую сборку? Или статическую?
    Я собрал драйвер для MySql. В папку plugins положил qsqlmysql.dll. Само приложение запускается без проблем. Но потом не может найти драйвер для MySql. Если есть опыт подобной сборки, поделитесь пожалуйста.
    Запись от Pingvinoff размещена 26.03.2015 в 07:15 Pingvinoff вне форума
  16. Старый комментарий
    а с использованием Sql приходилось делать динамическую сборку? Или статическую? Я собрал драйвер для MySql
    Я только с SQLite работал. Статически собирается нормально. Для этого при конфигурировании указывают ключ: -qt-sql-sqlite. Для MySql другой ключ нужен. Это можно посмотреть такой командой: configure -help

    Для динамической сборки кроме плагина нужно скопировать Qt5Sql.dll
    Запись от 8Observer8 размещена 26.03.2015 в 09:18 8Observer8 вне форума
  17. Старый комментарий
    Аватар для Avazart
    В папку plugins положил qsqlmysql.dll. Само приложение запускается без проблем. Но потом не может найти драйвер для MySql.
    Значит не туда положили.
    Запись от Avazart размещена 26.03.2015 в 13:57 Avazart вне форума
  18. Старый комментарий
    Аватар для edw1n
    Проделал все по процедуре. В итоге файл с программой весит не 15 Мб, а 115 Кб. Лежит он в папке release, и при попытке запустить выдает ошибку, просит Qt5Core.dll.

    Что может быть, если вообще можно определить?
    Запись от edw1n размещена 06.04.2015 в 16:13 edw1n вне форума
  19. Старый комментарий
    Проверьте в настройках, что указан qmake.exe из статической сборки. Проект перед сборкой нужно переключить на статическую сборку - в Creator'е слева внизу. После настройки заново откройте проект, но перед этим удалите *.pro.user. Я настройку описал в конце инструкции. Перепроверьте в ещё раз
    Запись от 8Observer8 размещена 06.04.2015 в 16:59 8Observer8 вне форума
  20. Старый комментарий
    Аватар для edw1n
    Перепроверил. Ничего не изменилось.
    Можно я вам на email напишу? Туда скрины скину. Очень нужна помощь с этим.

    Ещё заметил такую вещь, что раньше слева на тулбаре были 2 зеленых треугольника, сейчас же их нет. Возможно из-за того что я вчера переустановил Qt.

    Во вкладке Qt Versions там где выбрал qmake.exe в самом начале иконка знака восклицания в желтом треугольнике.

    upd. Прошу прощения за беспокойство, действительно мой косяк. В инструкции немного неправильно.

    В выпадающем списке "Qt versions" выбираем "Desktop Qt 5.4.0 Static MinGW 32 bit"
    У меня было Qt Profiles.
    Запись от edw1n размещена 06.04.2015 в 17:27 edw1n вне форума
 
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru