Статическая линковка Qt 5.x.x с MinGW32 в Windows (сборка в один exe’шник)
Доброго времени суток, хабравчане!
Я уверен, что все заметили, когда делали деплой своей программы через windeployqt.exe, программа зависит от разных динамических и qt’шных библиотек. Вследствие чего, развертка на других компьютерах становится неудобной. Почему? Приходится держать сам exe’шник в папке с нужными библиотеками. Разумеется, можно умудриться и без статической линковки решить эту проблему. Согласитесь, неудобно, да и каждый раз нужно лишние телодвижения делать. Проще один раз запариться и потом не делать лишних движений. Еще один плюс статической линковки — размер файла. При динамической линковке сам exe’шник весит примерно от 1 МБ до 7-8 МБ, а с окружением до 70 МБ может спокойно дойти, даже если проект небольшой. При статической линковке есть только exe’шник, который весит примерно в 2 раза меньше, чем окружение при динамической линковке.
Для сборки необходимы:
- Qt 5.x.x с включенными компонентами (если Qt уже был установлен, нужные компоненты можно установить с помощью Qt Maintenance Tool):
- Qt — Qt 5.x — MinGW x.x.x 32 bit
- Qt — Qt 5.x — Sources
- Qt — Tools — MinGW
- Perl (Strawberry Perl, к примеру). Я использую strawberry-perl-5.30.2.1-32bit.
Проверить, что путь к исполняемому файлу Perl прописан в переменной окружения PATH. Этот пункт можно пропустить, но лучше проверить. - Python 3.8
Путь установки Qt неважен, у меня он установлен на диске D. Убедитесь, что объем доступной памяти вам хватит. Нужно как минимум 30 ГБ свободного места.
- Переходите в директорию, где папка Src (D:\Qt\5.x.x\Src);
- Там создайте папку static (D:\Qt\5.х.х\static);
- Папку Src копируйте в папку static. Получится D:\Qt\5.x.x\static\Src. Дальнейшие действия будут там, в Папке Src;
- Создайте папку mingwXX_32 (у меня, например, mingw73_32). Получится D:\Qt\5.x.x\static\mingwXX_32;
- Редактируйте файл qmake.conf, который находится в D:\Qt\5.х.х\static\Src\qtbase\mkspecs\win32-g++.
В самый конец файла, после строки load(qt_config) допишите с новой строки эти команды:
Командная строка MinGW будет выдана как Qt 5.x.x (MinGW x.x.x 32-bit)
set LANG=en
cd /d %QT_INSTALL_PREFIX%\..\Src (именно такая строка без изменений)
Тут стоит обратить внимание на опцию -no-ssl — это значит что Qt будет собран без поддержки SSL.
Если никаких ошибок нету, можно продолжать:
Нереально длительный процесс, можете смело забыть про него на 4 часа ориентировачно, от скорости чтения/записи диска не зависит, а зависит от процессора. Там где -j4 вместо 4 поставьте число ядер вашего процессора.
В результате получаем статическое окружение в D:\Qt\5.x.x\statiс\mingwXX_32;
- В верхнем меню Инструменты -> Параметры -> Профили Qt
- Добавить -> D:\Qt\5.х.х\static\mingw73_32\bin\qmake.exe -> Применить
- Комплекты -> Добавить
- Название: Qt static x32 (или какое угодно)
- Тип Устройства: Desktop
- Устройство: Локальный ПК
- Корень образа: D:\Qt\5.х.х\static
- Компилятор:
a) для С: MinGW x.x.x 32-bit for C
b) для С++: MinGW x.x.x 32-bit for C++ - Профиль Qt: Qt static x32 (название профиля, которое вы указали при добавлении профиля)
- Применить -> Ок
Дополнительная информация. У меня:
- Qt 5.14.1
- MinGW 7.3.0 32-bit (mingw73_32)
- Python 3.8 x32
- strawberry-perl-5.30.2.1-32bi
- Windows 10 Pro x64
Полет нормальный.
Брал информацию отсюда:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Статическая линковка библиотек Qt 5.x (MinGW) под Windows
В данной статье я опишу как сделать отдельный комплект со статической линковкой библиотек Qt5. Если другими словами, мы сможем собирать проект в один исполняемый файл без Qt *.dll.
Подготовка
Начнем
Сборка комплекта
- Создаем резервную копию qmake.conf, он находится в «Qt5.5.0\5.5\mingw492_32\mkspecs\win32-g++»
- Делаем изменения в qmake.conf
- Создаем резервную копию исходников Qt, они находятся в «Qt5.5.0\5.5\Src»
- Теперь запускаем терминал Qt — Qt 5.5 for Desktop (MinGW 4.9.2 32 bit), он находится
в «Все программы -> Qt5.5.0 -> 5.5 -> MinGW 4.9.2 (32-bit)» или же полным путем «%appdata%\Microsoft\Windows\Start Menu\Programs\Qt 5.5.0\5.5\MinGW 4.9.2 (32-bit)« - Переходим в директорию с исходниками Qt, вводим команду
- Конфигурируем этап установки, вводя команду, где путь после -prefix, местоположение комплекта сборки
- По завершению конфигурирования, начинаем компиляцию исходников Qt, командой
После компиляции, будет несколько ошибок, не обращаем на них внимание, они никак не скажутся на нашей сборке.
Копируем файлы в указанный нами каталог на этапе конфигурирования, командой
После копирования, так же будет несколько ошибок, не обращаем на них внимание.
Добавляем статичный комплект в Qt Creator
- Запускаем Qt Creator
- Открываем «Инструменты -> Параметры..»
- Далее переходим «Сборка и запуск -> Qt Versions»
- Жмем добавить и выбираем qmake.exe, точнее «X:\Qt\Qt5.5.0_Static\bin\qmake.exe»
- Переходим во вкладку «Комплекты»
- Жмем добавить
- Пишем название нашего комплекта «Qt 5.5.0 Static MinGW 32», в профиле Qt указываем наш статичный профиль, который добавили в Qt Versions, так же указываем версию нашего компилятора и отладчика(MinGW)
- Все, мы добавили статичный комплект в Qt Creator
Примечание: в статический комплект не будут включены библиотеки gcc, что бы они так же собирались в исполняемый файл, надо прописать в .pro/.pri
Спасибо за внимание!
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Windows build qt static
Подписаться на канал:
Воспроизведение звукового файла wav на C++ | Программирование С++
Воспроизводим звуковой файл wav на С++
Простой кейлоггер на С++ (Keylogger) | Программирование С++
Пишем простой кейлоггер (keylogger) на С++. Режим видимый и невидимый.
Кейлоггер (keylogger) — программное обеспечение или аппаратное устройство, регистрирующее различные действия пользователя — нажатия клавиш на клавиатуре компьютера, движения и нажатия клавиш мыши и т. д.
Из ComboBox в текстовый файл *.txt на C++ (Пример 1) | Программирование С++
Создаем текстовый файл txt. Выбранные данные из ComboBox переносим в текстовый файл txt и сохраняем на языке C++
Удалить пробелы в Edit на С++ | Программирование С++
Удаляем пробелы в Edit.
Открыть документ Word на С++ | Программирование С++
Есть какой-то документ Word. Открываем его на С++.
Принимаем электронную почту на С++ | Программирование С++
Принимаем письма с электронного почтового ящика своей программой на С++.
Перемещаем график по листку в Excel на C++ | Программирование С++
Создаем график в Exccel. Перемещаем его по листку нашей книги.
Узнать разрядность операционной системы на C++ | Программирование С++
Узнаем разрядность операционной системы (64 или 32 битная) на C++
Слушаем онлайн радио при помощи библиотеки BASS на C++ | Программирование С++
Самый простой способ прослушать онлайн радио через интернет при помощи библиотеки BASS на C++
Из ComboBox в текстовый файл *.txt на C++ (Пример 2) | Программирование С++
Создаем текстовый файл txt. Выбранные данные из ComboBox переносим в текстовый файл txt и сохраняем на языке C++. Далее, добавляем еще одну строку с данными в этот же тестовый файл из ComboBox.
Воспроизведение и остановка звукового файла MP3, MP2, MP1, OGG, WAV, AIFF при помощи библиотеки BASS на C++ | Программирование С++
Воспроизведение и остановка звукового файла MP3, MP2, MP1, OGG, WAV, AIFF при помощи библиотеки BASS на C++