Хе, кто захочет кодить в QT для винды неизбежно столкнется с такой проблемой как невозможность запустить собранную программу без самого QT !
В этой теме расскажу как можно это обойти, ну и рассмотрим статическую сборку экзешника, а также сделаем свою сборку QT, так-что запасайтесь попкорном ! ;)
Итак как-же это обойти, приведу пару способов:
1)Самый простой способ, это поместить в папку с экзешником требуемые длл-ки, в общем-то и всё программа их подхватит, но возникнет вопрос, как передавать/распространять такую программу, волей не волей приходит на ум второй способ.
2)Это специальной тулзай, например мольбоксом (Можете сами написать какой упаковщик :)), упаковываем нашу программу, вместе с нужными дллками, кстати кто наблюдает за хак. разделом, скажет что-это ну очень похоже на крипторы и джойнеры, да-да это они и есть, только в данном случае мы используем это в благих целях гы-гы…
Минусы такого способа в том, что сам экзешник разрастается, может начинать глючить, ну и некоторые АВ могут начать матерится, идем дальше…
3)Создание самораспоковывающегося архива или инсталлятора, по мойму самый оптимальный способ, единственное инсталляторы многие платные, но можно и бесплатные найти…
Кстати в самом QTможно сделать не плохой инсталлятор, правда я пока не вкурил как это сделать, но если научусь напишу отдельную статью…
4)Ну и наконец пришли к названию данной темы, всё просто QT в момент компиляции программы будет упаковывать все нужные длл-ки прям в экзешник, в этоге мы сможем запускать наши программы без самого QT, позитивчик, НО способ на самом деле стрёмный, т.к. экзшник разрастается и может затормозится выполнение самой программы.
КОРОЧЕ ЮЗАЙТЕ ИНСТЕЛЛЫ !
Итак давайте попробуем собрать свой QT и сделать статический экзешник:
1)У меня заработало на QT 5.1.1, залил на яндекс полный пакет:
Хотя вышла уже 5.2, но не важно думаю принцип тот-же…
В момент установки ставите все галочки, иначе может не заработать и можем не собрать свою сборку из исходников, если в момент установки появится ошибка просто нажимаем «Пропустить»…
2) Скачиваем и устанавливаем
3) Создайте новую папку, в директории QT куда вы скопируете содержимое qtbase после окончания сборки.
Например как на скриншёте:
4) Редактируем D:\Qt\5.1.1\Src\qtbase\mkspecs\win32-g++\qmake.conf, находим QMAKE_LFLAGS, заменяем на QMAKE_LFLAGS = -static -static-libgcc
5)Далее нам нужно создать переменные среды, выполнить команды из консоли, я ну очень ленивый человек, поэтому создал батник в этой дерриктории:
D:\Qt\5.1.1\Src\qtbase (static.bat)
В батнике пишем следующее:
SET "QTDIR=%~dp0"
SET "QTDIR=%QTDIR:~0,-1%"
SET QMAKESPEC=win32-g++
SET PATH=C:\Python27;C:\Perl\bin; D:\Qt\5.1.1\Tools\mingw48_32\bin; D:\Qt\5.1.1\Src\qtbase\bin; D:\Qt\5.1.1\Tools\mingw48_32\bin;%QTDIR%\bin;%PATH%
cmd.exe
ВАЖНО ПРОВЕРЬТЕ ПУТИ, МОГУТ ОТЛИЧАТЬСЯ !!!
Далее запускаем батник и вводим следующую команду:
configure.exe -debug-and-release -opensource -static -opengl desktop -no-vcproj -nomake examples
Согласшаемся с лицензионным соглашением и бла-бла-бла ! ;)
Как всё сделаеться запускаем компилятор и делаем сборку, командой:
mingw32-make
Далее идём пить чай, т.к. делаться будет около часа, гы-гы ! :)
Также хотелось бы обратить внимание на обязательное наличие -nomake examples, иначе сборка займёт неприлично долгое время и съест примерно 50 ГБ свободного пространства. Оно вам надо?
6)Как всё собирётся делаем следующее:
Копируем содержимое D:\Qt\5.1.1\Src\qtbase в папку, созданную в пункте 3. Можно копировать не всё. Файлы, лежащие в корне этой папки, а также папки .obj, config.tests, dist, qmake, src, tests, util нам не нужны.
Теперь необходимо прописать новую конфигурацию в Qt Creator. Запускаем его.
7) Tools/Options/Build&Run/Qt Versions. Добавляем новую версию, указываем путь к qmake, который лежит в нашей новой папке слэш bin.
8) Tools/Options/Build&Run/Kits. Добавляем новый, указываем версию Qt, созданную ранее.
9) Всё готово. Теперь создаём GUI проект, выбираем новую конфигурацию, компилируем. Если размер полученного приложения внушителен (больше 1 МБ), значит, всё получилось. Но на всякий случай проверяем, запустив его.
У меня получилось, у кого не получится, проверьте пути…
И ещё скажу, что у меня экзешник получился аж в 200 мегабайт, а-а-а, что-бы уменьшить перейдите и скомпилируйте в релизе, а не в отладке…
И ещё скажу что экзешник получается всё равно достаточно увесистый, у меня получился в 12 мегабайт, почти пустой проект, но зато можно запускать на любой винде и без QT !
Если я никого не напугал, создавайте проги в QT, правда штука ОЧЕНЬ сложная в Bulder C++ всё гораздо прощё… ! ;)
Во вложении собранный мною статический экзешник, просто выводит окошко, можете попробовать…
В этой теме расскажу как можно это обойти, ну и рассмотрим статическую сборку экзешника, а также сделаем свою сборку QT, так-что запасайтесь попкорном ! ;)
Итак как-же это обойти, приведу пару способов:
1)Самый простой способ, это поместить в папку с экзешником требуемые длл-ки, в общем-то и всё программа их подхватит, но возникнет вопрос, как передавать/распространять такую программу, волей не волей приходит на ум второй способ.
2)Это специальной тулзай, например мольбоксом (Можете сами написать какой упаковщик :)), упаковываем нашу программу, вместе с нужными дллками, кстати кто наблюдает за хак. разделом, скажет что-это ну очень похоже на крипторы и джойнеры, да-да это они и есть, только в данном случае мы используем это в благих целях гы-гы…
Минусы такого способа в том, что сам экзешник разрастается, может начинать глючить, ну и некоторые АВ могут начать матерится, идем дальше…
3)Создание самораспоковывающегося архива или инсталлятора, по мойму самый оптимальный способ, единственное инсталляторы многие платные, но можно и бесплатные найти…
Кстати в самом QTможно сделать не плохой инсталлятор, правда я пока не вкурил как это сделать, но если научусь напишу отдельную статью…
4)Ну и наконец пришли к названию данной темы, всё просто QT в момент компиляции программы будет упаковывать все нужные длл-ки прям в экзешник, в этоге мы сможем запускать наши программы без самого QT, позитивчик, НО способ на самом деле стрёмный, т.к. экзшник разрастается и может затормозится выполнение самой программы.
КОРОЧЕ ЮЗАЙТЕ ИНСТЕЛЛЫ !
Итак давайте попробуем собрать свой QT и сделать статический экзешник:
1)У меня заработало на QT 5.1.1, залил на яндекс полный пакет:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
Хотя вышла уже 5.2, но не важно думаю принцип тот-же…
В момент установки ставите все галочки, иначе может не заработать и можем не собрать свою сборку из исходников, если в момент установки появится ошибка просто нажимаем «Пропустить»…
2) Скачиваем и устанавливаем
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
и
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
.3) Создайте новую папку, в директории QT куда вы скопируете содержимое qtbase после окончания сборки.
Например как на скриншёте:
4) Редактируем D:\Qt\5.1.1\Src\qtbase\mkspecs\win32-g++\qmake.conf, находим QMAKE_LFLAGS, заменяем на QMAKE_LFLAGS = -static -static-libgcc
5)Далее нам нужно создать переменные среды, выполнить команды из консоли, я ну очень ленивый человек, поэтому создал батник в этой дерриктории:
D:\Qt\5.1.1\Src\qtbase (static.bat)
В батнике пишем следующее:
SET "QTDIR=%~dp0"
SET "QTDIR=%QTDIR:~0,-1%"
SET QMAKESPEC=win32-g++
SET PATH=C:\Python27;C:\Perl\bin; D:\Qt\5.1.1\Tools\mingw48_32\bin; D:\Qt\5.1.1\Src\qtbase\bin; D:\Qt\5.1.1\Tools\mingw48_32\bin;%QTDIR%\bin;%PATH%
cmd.exe
ВАЖНО ПРОВЕРЬТЕ ПУТИ, МОГУТ ОТЛИЧАТЬСЯ !!!
Далее запускаем батник и вводим следующую команду:
configure.exe -debug-and-release -opensource -static -opengl desktop -no-vcproj -nomake examples
Согласшаемся с лицензионным соглашением и бла-бла-бла ! ;)
Как всё сделаеться запускаем компилятор и делаем сборку, командой:
mingw32-make
Далее идём пить чай, т.к. делаться будет около часа, гы-гы ! :)
Также хотелось бы обратить внимание на обязательное наличие -nomake examples, иначе сборка займёт неприлично долгое время и съест примерно 50 ГБ свободного пространства. Оно вам надо?
6)Как всё собирётся делаем следующее:
Копируем содержимое D:\Qt\5.1.1\Src\qtbase в папку, созданную в пункте 3. Можно копировать не всё. Файлы, лежащие в корне этой папки, а также папки .obj, config.tests, dist, qmake, src, tests, util нам не нужны.
Теперь необходимо прописать новую конфигурацию в Qt Creator. Запускаем его.
7) Tools/Options/Build&Run/Qt Versions. Добавляем новую версию, указываем путь к qmake, который лежит в нашей новой папке слэш bin.
8) Tools/Options/Build&Run/Kits. Добавляем новый, указываем версию Qt, созданную ранее.
9) Всё готово. Теперь создаём GUI проект, выбираем новую конфигурацию, компилируем. Если размер полученного приложения внушителен (больше 1 МБ), значит, всё получилось. Но на всякий случай проверяем, запустив его.
У меня получилось, у кого не получится, проверьте пути…
И ещё скажу, что у меня экзешник получился аж в 200 мегабайт, а-а-а, что-бы уменьшить перейдите и скомпилируйте в релизе, а не в отладке…
И ещё скажу что экзешник получается всё равно достаточно увесистый, у меня получился в 12 мегабайт, почти пустой проект, но зато можно запускать на любой винде и без QT !
Если я никого не напугал, создавайте проги в QT, правда штука ОЧЕНЬ сложная в Bulder C++ всё гораздо прощё… ! ;)
Во вложении собранный мною статический экзешник, просто выводит окошко, можете попробовать…