Russian Qt Forum

Qt => Уроки и статьи => Тема начата: 8Observer8 от Январь 22, 2014, 16:09



Название: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Январь 22, 2014, 16:09
Примечание. После того, как соберёте по инструкции ниже посмотрите, как использовать сборку на практике: Создание оконного приложения на С++ (Qt). Запуск приложения на компьютере пользователя в релизе (http://"http://www.youtube.com/watch?v=zoLzkaLA7Co&feature=youtu.be")

Перед тем как научиться собирать приложения в один 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\win32-g++" и создаём резервную копию файла "qmake.conf"

- в файле "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-to-build-a-static-Qt-for-Windows-MinGW (http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-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 минут)

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

Код:
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

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

Код:
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\win32-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) и добавить строку:

Код
C++ (Qt)
QMAKE_LFLAGS += -static -static-libgcc
 

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

Цитировать
upx.exe -9 -o ПолноеИмяНовогоФайлаEXE ПолноеИмяСтарогоФайлаExe

К примеру, мы собрали статически файл Boxes.exe (15 МБайт). Переименуем его в Boxes1.exe и выполним команду:
Цитировать
D:\_soft\upx391w\upx391w\upx.exe -9 -o C:\Users\Ivan\GoogleDrive\Qt\Bullet\build-Boxes-Desktop_Qt_5_4_MinGW_32bit_Static-Release\release\Boxes.exe C:\Users\Ivan\GoogleDrive\Qt\Bullet\build-Boxes-Desktop_Qt_5_4_MinGW_32bit_Static-Release\release\Boxes1.exe

После этой команды будет создан Boxes.exe весом 5.5 МБайт

Instruction for Linux Mint (and Ubuntu)

Links:
http://help.ubuntu.ru/wiki/qt_static
http://qt-project.org/wiki/Building_Qt_5_from_Git
http://qt-project.org/forums/viewthread/30708/

sudo apt-get install build-essential

sudo apt-get install mesa-common-dev

sudo apt-get install build-essential ^libxcb.* libx11-xcb-dev libglu1-mesa-dev libxrender-dev libfontconfig1-d

cd qt-everywhere-opensource-src-5.4.0

Note. Replace "/home/ivan/Qt5.4.0_Static"

./configure -static -platform linux-g++ -prefix "/home/ivan/Qt5.4.0_Static" -release -opensource -confirm-license -fontconfig -nomake examples -nomake tests -nomake tools -opengl desktop -qt-sql-sqlite -make libs -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype

make

make install


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Serr500 от Январь 22, 2014, 16:29
Да уж... Скачай откомпилированную версию Qt и перекомпилируй... Да ещё и папку с исходниками компилятор изгадит. Думаю, инструкция должна быть несколько иной: скачать архив исходников и скомпилировать. И почему собираем только QtBase?

P.S. Никто не пробовал в 5.2 WebKit собирать статически? В четвёрке не собиралось. Интересно, изменилась ли ситуация.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: alex312 от Январь 22, 2014, 16:56
P.S. Никто не пробовал в 5.2 WebKit собирать статически. В четвёрке не собиралось. Интересно, изменилась ли ситуация.
Как-то собирал, не помню какую версию. Но прикол в том что статическая либа WebKit-а весила 100 мегабайт. Пример FunnyBrowser весил около 40 Мб, запускался минут 5.  :o


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Январь 22, 2014, 17:22
> Да уж... Скачай откомпилированную версию Qt и перекомпилируй...
Я скачал откомпилированную версию вместе с исходниками, чтобы была возможность и в обычном режиме собирать приложения, то есть переключаться между статической и динамической версиями сборок.

> Да ещё и папку с исходниками компилятор изгадит.
Да, возможно загаживаются папки с исходниками, но меня это пока не беспокоит. По-моему есть какая-то команда, чтобы почистить папки с исходниками от ненужных файлов. Если кто помнит эту команду, то напишите.

> И почему собираем только QtBase?
Не знаю, что входит в QtBase. Если чего-то не будет хватать, то изменю инструкцию. Добавлю как дополнительные модули подключать к сборке.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Serr500 от Январь 22, 2014, 17:35
Да, возможно загаживаются папки с исходниками, но меня это пока не беспокоит. По-моему есть какая-то команда, чтобы почистить папки с исходниками от ненужных файлов. Если кто помнит эту команду, то напишите.
А почему Вы считаете, что других это тоже не беспокоит? Папки чистятся от мусора почти полностью командой make clean, но и после этого остаются скомпилированные либы, которые имеют весьма немаленький объём.

Не знаю, что входит в QtBase.
Шедеврально! ;D Больше мне сказать нечего. Надеюсь, что на серьёзных ресурсах подобные инструкции появляться не будут. Засим откланиваюсь.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Igors от Январь 22, 2014, 17:47
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll, Qt5Gui.dll и т.д.
Дело хорошее, может сэкономить людям время, НО платформу и компилятор надо обязательно указывать, тоже жирным и желательно первым


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Январь 22, 2014, 18:08
Igors, спасибо за одобрение! Добавил. Я сам, когда собирать пытался, то много помучился и искал вот такую инструкцию. Да, возможно в ней не всё учтено, но я и написал здесь, чтобы мне указали на недостатки. Если у меня в процессе сборок или запуска на другой машине появятся проблемы (не будет хватать других модулей), то я дополню инструкцию. Как уже указали, тут есть проблемка, что QtBase может   если нужны будут дополнительные модули.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Serr500 от Январь 22, 2014, 18:25
- выбираем тип лицензии "Open Source Edition" и подтверждаем лицензию
Код:
configure -static -prefix "C:\Qt\Qt5.2.0_static" -opengl desktop -nomake examples -nomake tests

Дарю:
Код:
-opensource -confirm-license
И ничего выбирать и подтверждать не надо.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Январь 22, 2014, 18:31
Serr500, спасибо! Пока так оставлю. Когда ещё что-то появится существенное, то проверю работу и тогда изменю :)


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Akon от Январь 23, 2014, 01:02
Если для configure указан ключ static, зачем его еще и во флаг компоновщика помещать?


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Serr500 от Январь 23, 2014, 07:35
Потому что при -static в configure статическими будут только сами библиотеки Qt, а libstdc++, libgcc и libwinpthread будут связываться динамически. Чтобы убрать зависимость от этих библиотек и меняют флаги компоновщика.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: xintrea от Январь 23, 2014, 10:40
Тебую такую же инструкцию под Linux. А то никакие statifier-ы не работают.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Январь 23, 2014, 10:52
xintrea, это в списке моих приоритетов. Жизненно необходимо для моей будущей работы :) Надеюсь получить её. Там нужно будет работать и на Windows и на Linux. Через месяц собеседование. Дали список вопросов и самый первый такой:

Цитировать
1. Деплоймент приложений, написанных с использованием Qt5.2 на Windows, Linux и других платформах.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Akon от Январь 23, 2014, 22:18
Цитировать
Потому что при -static в configure статическими будут только сами библиотеки Qt, а libstdc++, libgcc и libwinpthread будут связываться динамически. Чтобы убрать зависимость от этих библиотек и меняют флаги компоновщика.
Согласен, спасибо.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: qate от Январь 25, 2014, 07:25
Недостаток статической сборки - большие обновления
В случаи .dll/.so - придется обновить (выслать заказчику/клиенту) только exe файл (+ скрипт обновления), что на порядки меньше всего дистрибутива
Если не gpl/lgpl то нельзя линковать статически (поправьте если не так)


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Январь 31, 2014, 07:17
Остальные модули так же собираются? К примеру: network, widgets, sql, xml и т.д. Хотя вот opengl я там учёл в сборке, поэтому собирается нормально и запускается на другой машине.

Вот так пойдёт?

Цитировать
configure -static -prefix "C:\Qt\Qt5.2.0_static" -network -sql -widgets -xml -opengl desktop -nomake examples -nomake tests


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Апрель 18, 2014, 11:10
Я хочу собрать Qt статически со всеми модулями. Ввожу такую команду:

Цитировать
configure -static -prefix "C:\Qt\Qt5.2.1_static" -gui -multimedia -multimediawidgets -network -qml -sql -testlib -webkit -widgets -bluetooth -positioning -scripttools -serialport -svg -winextras -x11extras -xml -xmlpatterns -opengl desktop -nomake examples -nomake tests

А мне выдаётся сообщение:
Цитировать
Unknown option -multimedia.

Подскажите, пожалуйста, что не так? Как правильно написать?


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: pilot.net от Май 01, 2014, 07:00
Я хочу собрать Qt статически со всеми модулями. Ввожу такую команду:

Цитировать
configure -static -prefix "C:\Qt\Qt5.2.1_static" -gui -multimedia -multimediawidgets -network -qml -sql -testlib -webkit -widgets -bluetooth -positioning -scripttools -serialport -svg -winextras -x11extras -xml -xmlpatterns -opengl desktop -nomake examples -nomake tests

А мне выдаётся сообщение:
Цитировать
Unknown option -multimedia.

Подскажите, пожалуйста, что не так? Как правильно написать?

Кто инструкцию то пишет ? Вот и разберись сам . А то все готовое хотите


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Serr500 от Май 01, 2014, 12:59
Код:
configure -platform %PLATFORM_NAME% -help


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Paramon от Июнь 20, 2014, 20:48
А нигде нельзя скачать уже готовое?  :P
Я начал собирать 4.8.6 компилятором 2010 студии. За 3 часа собралось только 5 библиотек. Компьютер не тугодум.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: kambala от Июнь 20, 2014, 22:46
надо было исключить из сборки ненужные бибилотеки


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: navrocky от Июнь 20, 2014, 23:27
Хочу добавить, что есть в wiki мануал по статической сборке с mingw - http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW

Там есть ссылка на PowerShell-скрипт который сделает всю работу автоматически. У меня он отработал без сбоев.

Единственный минус, нет возможности собрать с поддержкой ANGLE из-за ошибок в configure, которая в упор не видит dx sdk когда компилятор не MSVC.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Overload от Август 29, 2014, 23:32
может у кого-нибудь получилось в netbeans настроить?


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: navrocky от Август 30, 2014, 15:15
может у кого-нибудь получилось в netbeans настроить?

Что настроить?


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Overload от Август 31, 2014, 12:16
что бы без зависимостей, пробовал делать по этой интсрукции что здесь, все получилось, не могу только сам netbeans настроить, где куда там что прописывать, менял путь к qmake от новой сбокри , но этого видимо недостаточно, выдает ошибки


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Overload от Август 31, 2014, 12:50
вот что он мне выдает
Код:
"/C/msys/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE=/C/Qt/Qt5.2.1_static/bin/qmake.exe SUBPROJECTS= .build-conf
make.exe[1]: Entering directory `/c/Users/Overload/Documents/NetBeansProjects/test5'
/C/Qt/Qt5.2.1_static/bin/qmake.exe VPATH=. -spec win32-g++ -o qttmp-Debug.mk nbproject/qt-Debug.pro
mv -f qttmp-Debug.mk nbproject/qt-Debug.mk
"/C/msys/1.0/bin/make.exe" -f nbproject/qt-Debug.mk dist/Debug/MinGW-Windows/test5.exe
make.exe[2]: Entering directory `/c/Users/Overload/Documents/NetBeansProjects/test5'
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -Inbproject -I'../../../../../Qt/Qt5.2.1_static/include' -I'../../../../../Qt/Qt5.2.1_static/include/QtWidgets' -I'../../../../../Qt/Qt5.2.1_static/include/QtGui' -I'../../../../../Qt/Qt5.2.1_static/include/QtCore' -I'.' -I'.' -I'../../../../../Qt/Qt5.2.1_static/mkspecs/win32-g++' -o build/Debug/MinGW-Windows/PaintImage.o PaintImage.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -Inbproject -I'../../../../../Qt/Qt5.2.1_static/include' -I'../../../../../Qt/Qt5.2.1_static/include/QtWidgets' -I'../../../../../Qt/Qt5.2.1_static/include/QtGui' -I'../../../../../Qt/Qt5.2.1_static/include/QtCore' -I'.' -I'.' -I'../../../../../Qt/Qt5.2.1_static/mkspecs/win32-g++' -o build/Debug/MinGW-Windows/main.o main.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -Inbproject -I'../../../../../Qt/Qt5.2.1_static/include' -I'../../../../../Qt/Qt5.2.1_static/include/QtWidgets' -I'../../../../../Qt/Qt5.2.1_static/include/QtGui' -I'../../../../../Qt/Qt5.2.1_static/include/QtCore' -I'.' -I'.' -I'../../../../../Qt/Qt5.2.1_static/mkspecs/win32-g++' -o build/Debug/MinGW-Windows/test5_plugin_import.o test5_plugin_import.cpp
C:/Qt/Qt5.2.1_static/bin/moc.exe -DUNICODE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -D__GNUC__ -DWIN32 -Inbproject -I'../../../../../Qt/Qt5.2.1_static/include' -I'../../../../../Qt/Qt5.2.1_static/include/QtWidgets' -I'../../../../../Qt/Qt5.2.1_static/include/QtGui' -I'../../../../../Qt/Qt5.2.1_static/include/QtCore' -I'.' -I'.' -I'../../../../../Qt/Qt5.2.1_static/mkspecs/win32-g++' PaintImage.h -o moc_PaintImage.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -Inbproject -I'../../../../../Qt/Qt5.2.1_static/include' -I'../../../../../Qt/Qt5.2.1_static/include/QtWidgets' -I'../../../../../Qt/Qt5.2.1_static/include/QtGui' -I'../../../../../Qt/Qt5.2.1_static/include/QtCore' -I'.' -I'.' -I'../../../../../Qt/Qt5.2.1_static/mkspecs/win32-g++' -o build/Debug/MinGW-Windows/moc_PaintImage.o moc_PaintImage.cpp
windres -i test5_resource.rc -o build/Debug/MinGW-Windows/test5_resource_res.o --include-dir=. -DUNICODE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
g++ -static -static-libgcc -Wl,-subsystem,windows -mthreads -o dist/Debug/MinGW-Windows/test5.exe build/Debug/MinGW-Windows/PaintImage.o build/Debug/MinGW-Windows/main.o build/Debug/MinGW-Windows/test5_plugin_import.o build/Debug/MinGW-Windows/moc_PaintImage.o  -lmingw32 -lqtmaind -LC:/Qt/Qt5.2.1_static/lib -lQt5Widgetsd -LC:/Qt/Qt5.2.1_static/plugins/platforms -lqwindowsd -lwinspool -lshlwapi -lQt5PlatformSupportd -lQt5Guid -lcomdlg32 -loleaut32 -limm32 -lwinmm -lglu32 -lopengl32 -lgdi32 -lQt5Cored -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz build/Debug/MinGW-Windows/test5_resource_res.o
C:/Qt/Qt5.2.1_static/plugins/platforms\libqwindowsd.a(qwindowsdialoghelpers.o): In function `ZN36QWindowsNativeFileDialogEventHandler6createEP28QWindowsNativeFileDialogBase':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:834: undefined reference to `IID_IFileDialogEvents'
C:/Qt/Qt5.2.1_static/plugins/platforms\libqwindowsd.a(qwindowsdialoghelpers.o): In function `ZN28QWindowsNativeFileDialogBase9shellItemERK7QString':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:978: undefined reference to `IID_IShellItem'
C:/Qt/Qt5.2.1_static/plugins/platforms\libqwindowsd.a(qwindowsdialoghelpers.o): In function `ZN28QWindowsNativeFileDialogBase18libraryItemFoldersEP10IShellItem':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:1084: undefined reference to `IID_IShellItemArray'
C:/Qt/Qt5.2.1_static/plugins/platforms\libqwindowsd.a(qwindowsdialoghelpers.o): In function `ZN28QWindowsNativeFileDialogBase28libraryItemDefaultSaveFolderEP10IShellItem':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:1099: undefined reference to `IID_IShellItem'
C:/Qt/Qt5.2.1_static/plugins/platforms\libqwindowsd.a(qwindowsdialoghelpers.o): In function `ZN36QWindowsNativeFileDialogEventHandler14QueryInterfaceERK5_GUIDPPv@12':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:792: undefined reference to `IID_IFileDialogEvents'
C:/Qt/Qt5.2.1_static/plugins/platforms\libqwindowsd.a(qwindowsdialoghelpers.o): In function `ZN28QWindowsNativeFileDialogBase6createEN18QFileDialogOptions10AcceptModeERK28QWindowsFileDialogSharedData':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:1509: undefined reference to `IID_IFileOpenDialog'
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:1509: undefined reference to `CLSID_FileOpenDialog'
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:1515: undefined reference to `IID_IFileSaveDialog'
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\platforms\windows/qwindowsdialoghelpers.cpp:1515: undefined reference to `CLSID_FileSaveDialog'
C:/Qt/Qt5.2.1_static/lib\libQt5Guid.a(qxpmhandler.o): In function `Z6sscanfPKcS0_z':
c:/qt/qt5.2.1/tools/mingw48_32/i686-w64-mingw32/include/stdio.h:211: undefined reference to `__mingw_vsscanf'
C:/Qt/Qt5.2.1_static/lib\libQt5Cored.a(qdatetime.o): In function `qt_localtime':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/tools/qdatetime.cpp:2380: undefined reference to `pthread_testcancel'
C:/Qt/Qt5.2.1_static/lib\libQt5Cored.a(harfbuzz-shaper-all.o): In function `positionCluster':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/../3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:44: undefined reference to `_wassert'
C:/Qt/Qt5.2.1_static/lib\libQt5Cored.a(harfbuzz-shaper-all.o): In function `HB_HeuristicSetGlyphAttributes':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/../3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:262: undefined reference to `_wassert'
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/../3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:280: undefined reference to `_wassert'
C:/Qt/Qt5.2.1_static/lib\libQt5Cored.a(harfbuzz-shaper-all.o): In function `checkScript':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/../3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:598: undefined reference to `_wassert'
C:/Qt/Qt5.2.1_static/lib\libQt5Cored.a(harfbuzz-shaper-all.o): In function `HB_SelectScript':
c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/../3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:789: undefined reference to `_wassert'
C:/Qt/Qt5.2.1_static/lib\libQt5Cored.a(harfbuzz-shaper-all.o):c:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\corelib/../3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:1098: more undefined references to `_wassert' follow
collect2.exe: error: ld returned 1 exit status
make.exe[2]: *** [dist/Debug/MinGW-Windows/test5.exe] Error 1
make.exe[2]: Leaving directory `/c/Users/Overload/Documents/NetBeansProjects/test5'
make.exe[1]: *** [.build-conf] Error 2
make.exe[1]: Leaving directory `/c/Users/Overload/Documents/NetBeansProjects/test5'
make.exe": *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1m 2s)


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: vizir.vs от Сентябрь 01, 2014, 10:47
На сколько я знаю LGPL в случае статической сборки нужно выкладывать объектные файлы приложения. Чтобы пользователь мог сам слинковать приложение с новой версией либы Qt (при коммерческом использовании). Так что не вижу особого смысла делать статическую линковку Qt, кроме как для личного/некоммерческого использования.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Сентябрь 29, 2014, 19:01
Цитировать
На сколько я знаю LGPL в случае статической сборки нужно выкладывать объектные файлы приложения.
По-моему, только исходники.

Хочу добавить, что есть в wiki мануал по статической сборке с mingw - http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW
Там есть ссылка на PowerShell-скрипт который сделает всю работу автоматически. У меня он отработал без сбоев.
Единственный минус, нет возможности собрать с поддержкой ANGLE из-за ошибок в configure, которая в упор не видит dx sdk когда компилятор не MSVC.
Я не смог поставить PowerShell на Win7:
(http://i7.pixs.ru/storage/3/2/0/376png_2861176_14042320.png)

Мне частично удалось собрать статически. Где можно посмотреть какие модули и как подключать при конфигурировании? Например, я хотел собрать статически приложение с последовательным портом, но выдаётся ошибка:
Код
C++ (Qt)
Project ERROR: Unknown module(s) in QT: serialport
 

Такая команда не даёт всей картины:
Код
C++ (Qt)
configure -platform win32-g++ -? > report.txt
 

Код:
+ cd qtbase
+ C:\Qt\Qt5.3.2\5.3\Src\qtbase\configure.bat -top-level -platform win32-g++ -?
Usage: configure [options]

Installation options:

These are optional, but you may specify install directories.

    -prefix <dir> ...... This will install everything relative to <dir>
                         (default $QT_INSTALL_PREFIX)

    -extprefix <dir> ... When -sysroot is used, install everything to <dir>,
                         rather than into SYSROOT/PREFIX.

    -hostprefix [dir] .. Tools and libraries needed when developing
                         applications are installed in [dir]. If [dir] is not
                         given, the current build directory will be used.
                         (default EXTPREFIX)

You may use these to separate different parts of the install:

    -bindir <dir> ...... User executables will be installed to <dir>
                         (default PREFIX/bin)
    -libdir <dir> ...... Libraries will be installed to <dir>
                         (default PREFIX/lib)
    -headerdir <dir> ... Headers will be installed to <dir>
                         (default PREFIX/include)
    -archdatadir <dir> . Architecture-dependent data used by Qt will be
                         installed to <dir>
                         (default PREFIX)
    -libexecdir <dir> .. Program executables will be installed to <dir>
                         (default ARCHDATADIR/bin)
    -plugindir <dir> ... Plugins will be installed to <dir>
                         (default ARCHDATADIR/plugins)
    -importdir <dir> ... Imports for QML1 will be installed to <dir>
                         (default ARCHDATADIR/imports)
    -qmldir <dir> ...... Imports for QML2 will be installed to <dir>
                         (default ARCHDATADIR/qml)
    -datadir <dir> ..... Data used by Qt programs will be installed to <dir>
                         (default PREFIX)
    -docdir <dir> ...... Documentation will be installed to <dir>
                         (default DATADIR/doc)
    -translationdir <dir> Translations of Qt programs will be installed to
                          <dir>
                          (default DATADIR/translations)
    -examplesdir <dir> . Examples will be installed to <dir>
                         (default PREFIX/examples)
    -testsdir <dir> .... Tests will be installed to <dir>
                         (default PREFIX/tests)

    -hostbindir <dir> .. Host executables will be installed to <dir>
                         (default HOSTPREFIX/bin)
    -hostlibdir <dir> .. Host libraries will be installed to <dir>
                         (default HOSTPREFIX/lib)
    -hostdatadir <dir> . Data used by qmake will be installed to <dir>
                         (default HOSTPREFIX)

Configure options:

 The defaults (*) are usually acceptable. A plus (+) denotes a default value
 that needs to be evaluated. If the evaluation succeeds, the feature is
 included. Here is a short explanation of each option:

    -release ........... Compile and link Qt with debugging turned off.
 *  -debug ............. Compile and link Qt with debugging turned on.
 +  -debug-and-release . Compile and link two Qt libraries, with and without
                         debugging turned on.

    -force-debug-info .. Create symbol files for release builds.
    -separate-debug-info Strip debug information into a separate file.

    -developer-build ... Compile and link Qt with Qt developer options
                         (including auto-tests exporting)

    -opensource ........ Compile and link the Open-Source Edition of Qt.
    -commercial ........ Compile and link the Commercial Edition of Qt.

 +  -c++11 ............. Compile Qt with C++11 support enabled.
    -no-c++11 .......... Do not compile Qt with C++11 support enabled.

 *  -shared ............ Create and use shared Qt libraries.
    -static ............ Create and use static Qt libraries.

    -ltcg .............. Use Link Time Code Generation. (Release builds only)
 *  -no-ltcg ........... Do not use Link Time Code Generation.

    -make <part> ....... Add part to the list of parts to be built at make time
                           libs
                           tools
                           examples
    -nomake <part> ..... Exclude part from the list of parts to be built.

    -skip <module> ..... Exclude an entire module from the build.

    -no-compile-examples Install only the sources of examples.

    -no-widgets ........ Disable Qt Widgets module.

    -no-gui ............ Disable Qt GUI module.

    -no-accessibility .. Disable accessibility support.

     ................... Disabling accessibility is not recommended, as it will
                         break QStyle
                         and may break other internal parts of Qt.
                         With this switch you create a source incompatible
                         version of Qt,
                         which is unsupported.

 *  -accessibility ..... Enable accessibility support.

    -no-sql-<driver> ... Disable SQL <driver> entirely, by default none are
                         turned on.
    -qt-sql-<driver> ... Enable a SQL <driver> in the Qt Library.
    -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run
                         time.
                         Available values for <driver>:
                           mysql
                           psql
                           oci
                           odbc
                           tds
                           db2
 +                         sqlite
                           sqlite2
                           ibase
                         (drivers marked with a '+' have been detected as
                         available on this system)

    -system-sqlite ..... Use sqlite from the operating system.

    -no-opengl ......... Do not support OpenGL.
    -opengl <api> ...... Enable OpenGL support with specified API version.
                         Available values for <api>:
                           desktop - Enable support for Desktop OpenGL
                           dynamic - Enable support for dynamically loaded
                         OpenGL (either desktop or ES)
 *                         es2 - Enable support for OpenGL ES 2.0

 *  -no-openvg ......... Disables OpenVG functionality.
    -openvg ............ Enables OpenVG functionality.

    -force-asserts ..... Activate asserts in release mode.

    -platform <spec> ... The operating system and compiler you are building on.
                         (default %QMAKESPEC%)

    -xplatform <spec> .. The operating system and compiler you are cross
                         compiling to.

                         See the README file for a list of supported operating
                         systems and compilers.

    -target ............ Set target OS version. Currently the only valid value
                         is 'xp' for targeting Windows XP.
                         MSVC >= 2012 targets Windows Vista by default.

    -sysroot <dir> ..... Sets <dir> as the target compiler's and qmake's
                         sysroot and also sets pkg-config paths.
    -no-gcc-sysroot .... When using -sysroot, it disables the passing of
                         --sysroot to the compiler.

    -qconfig <local> ... Use src/corelib/global/qconfig-<local>.h rather than
                         the
                         default 'full'.

 *  -no-nis ............ Do not compile NIS support.
    -nis ............... Compile NIS support.

 +  -neon .............. Enable the use of NEON instructions.
    -no-neon ........... Do not enable the use of NEON instructions.

    -no-iconv .......... Do not enable support for iconv(3).
 +  -iconv ............. Enable support for iconv(3).
 +  -sun-iconv ......... Enable support for iconv(3) using sun-iconv.
 +  -gnu-iconv ......... Enable support for iconv(3) using gnu-libiconv.

    -no-evdev .......... Do not enable support for evdev.
 +  -evdev ............. Enable support for evdev.
    -no-mtdev .......... Do not enable support for mtdev.
 +  -mtdev ............. Enable support for mtdev.
 +  -inotify ........... Explicitly enable Qt inotify(7) support.
    -no-inotify ........ Explicitly disable Qt inotify(7) support.

 +  -eventfd ........... Enable eventfd(7) support in the UNIX event loop.
    -no-eventfd ........ Disable eventfd(7) support in the UNIX event loop.

 *  -largefile ......... Enables Qt to access files larger than 4 GB.

    -fontconfig ........ Build with FontConfig support.
 *  -no-fontconfig ..... Do not build with FontConfig support.

    -posix-ipc ......... Enable POSIX IPC.

    -glib .............. Compile Glib support.

    -sysconfdir <dir> .. Settings used by Qt programs will be looked for in
                         <dir>.

    -system-proxies .... Use system network proxies by default.
 *  -no-system-proxies . Do not use system network proxies by default.

 +  -warnings-are-errors Make warnings be treated as errors.
    -no-warnings-are-errors Make warnings be treated normally.
    -qtnamespace <name> Wraps all Qt library code in 'namespace name {...}'.
    -qtlibinfix <infix> Renames all Qt* libs to Qt*<infix>.

    -D <define> ........ Add an explicit define to the preprocessor.
    -I <includepath> ... Add an explicit include path.
    -L <librarypath> ... Add an explicit library path.
    -l <libraryname> ... Add an explicit library name, residing in a
                         librarypath.

    -help, -h, -? ...... Display this information.

Third Party Libraries:

    -qt-zlib ........... Use the zlib bundled with Qt.
 +  -system-zlib ....... Use zlib from the operating system.
                         See http://www.gzip.org/zlib

    -qt-pcre ........... Use the PCRE library bundled with Qt.
 +  -system-pcre ....... Use the PCRE library from the operating system.
                         See http://pcre.org/

 +  -icu ............... Use the ICU library.
    -no-icu ............ Do not use the ICU library.
                         See http://site.icu-project.org/

    -no-gif ............ Do not compile GIF reading support.

    -no-libpng ......... Do not compile PNG support.
    -qt-libpng ......... Use the libpng bundled with Qt.
 +  -system-libpng ..... Use libpng from the operating system.
                         See http://www.libpng.org/pub/png

    -no-libjpeg ........ Do not compile JPEG support.
    -qt-libjpeg ........ Use the libjpeg bundled with Qt.
 +  -system-libjpeg .... Use libjpeg from the operating system.
                         See http://www.ijg.org

    -no-freetype ....... Do not compile in Freetype2 support.
 *  -qt-freetype ....... Use the libfreetype bundled with Qt.
    -system-freetype ... Use the libfreetype provided by the system.
 *  -no-harfbuzz ....... Do not compile in HarfBuzz-NG support.
    -qt-harfbuzz ....... (experimental) Use HarfBuzz-NG bundled with Qt
                         to do text shaping. It can still be disabled
                         by setting QT_HARFBUZZ environment variable to "old".
    -system-harfbuzz ... (experimental) Use HarfBuzz-NG from the operating
                         system
                         to do text shaping. It can still be disabled
                         by setting QT_HARFBUZZ environment variable to "old".

 +  -angle ............. Use the ANGLE implementation of OpenGL ES 2.0.
    -angle-d3d11 ....... Use the Direct3D 11-based ANGLE implementation of
                         OpenGL ES 2.0.
    -no-angle .......... Do not use ANGLE.
                         See http://code.google.com/p/angleproject/


Qt for Windows only:

    -no-vcproj ......... Do not generate VC++ .vcproj files.
 *  -vcproj ............ Generate VC++ .vcproj files, only if platform
                         "win32-msvc.net".

    -no-incredibuild-xge Do not add IncrediBuild XGE distribution commands to
                         custom build steps.
 +  -incredibuild-xge .. Add IncrediBuild XGE distribution commands to custom
                         build steps. This will distribute MOC and UIC steps,
                         and other custom buildsteps which are added to the
                         INCREDIBUILD_XGE variable.
                         (The IncrediBuild distribution commands are only added
                         to Visual Studio projects)

 *  -no-plugin-manifests Do not embed manifests in plugins.
    -plugin-manifests .. Embed manifests in plugins.

    -no-qmake .......... Do not compile qmake.
 *  -qmake ............. Compile qmake.

 *  -process ........... Generate only top-level Makefile.
    -fully-process ..... Generate Makefiles/Project files for the entire Qt
                         tree.
    -dont-process ...... Do not generate Makefiles/Project files.

    -qreal [double|float] typedef qreal to the specified type. The default is
                          double.
                          Note that changing this flag affects binary
                          compatibility.

    -no-rtti ........... Do not compile runtime type information.
 *  -rtti .............. Compile runtime type information.
    -no-strip .......... Do not strip libraries and executables of debug info
                         when installing.
 *  -strip ............. Strip libraries and executables of debug info when
                         installing.

    -no-sse2 ........... Do not compile with use of SSE2 instructions.
 +  -sse2 .............. Compile with use of SSE2 instructions.
    -no-sse3 ........... Do not compile with use of SSE3 instructions.
 +  -sse3 .............. Compile with use of SSE3 instructions.
    -no-ssse3 .......... Do not compile with use of SSSE3 instructions.
 +  -ssse3 ............. Compile with use of SSSE3 instructions.
    -no-sse4.1 ......... Do not compile with use of SSE4.1 instructions.
 +  -sse4.1 ............ Compile with use of SSE4.1 instructions.
    -no-sse4.2 ......... Do not compile with use of SSE4.2 instructions.
 +  -sse4.2 ............ Compile with use of SSE4.2 instructions.
    -no-avx ............ Do not compile with use of AVX instructions.
 +  -avx ............... Compile with use of AVX instructions.
    -no-avx2 ........... Do not compile with use of AVX2 instructions.
 +  -avx2 .............. Compile with use of AVX2 instructions.

    -no-openssl ........ Do not compile support for OpenSSL.
 +  -openssl ........... Enable run-time OpenSSL support.
    -openssl-linked .... Enable linked OpenSSL support.

    -no-dbus ........... Do not compile in D-Bus support.
 +  -dbus .............. Compile in D-Bus support and load libdbus-1
                         dynamically.
    -dbus-linked ....... Compile in D-Bus support and link to libdbus-1.

    -no-audio-backend .. Do not compile in the platform audio backend into
                         Qt Multimedia.
 +  -audio-backend ..... Compile in the platform audio backend into Qt
                         Multimedia.

    -no-wmf-backend .... Do not compile in the windows media foundation backend
                         into Qt Multimedia.
 +  -wmf-backend ....... Compile in the windows media foundation backend into
                         Qt Multimedia.

    -no-qml-debug ...... Do not build the in-process QML debugging support.
 *  -qml-debug ......... Build the in-process QML debugging support.

 *  -no-directwrite .... Do not build support for DirectWrite font rendering.
    -directwrite ....... Build support for DirectWrite font rendering
                         (experimental, requires DirectWrite availability on
                         target systems, e.g. Windows Vista with Platform
                         Update, Windows 7, etc.)

 *  -no-direct2d ....... Do not build the Direct2D platform plugin.
    -direct2d .......... Build the Direct2D platform plugin (experimental,
                         requires Direct2D availability on target systems,
                         e.g. Windows 7 with Platform Update, Windows 8, etc.)

    -no-style-<style> .. Disable <style> entirely.
    -qt-style-<style> .. Enable <style> in the Qt Library.
                         Available styles:
 *                         windows
 +                         windowsxp
 +                         windowsvista
 *                         fusion
                           windowsce
                           windowsmobile

    -no-native-gestures Do not use native gestures on Windows 7.
 *  -native-gestures ... Use native gestures on Windows 7.

 *  -no-mp ............. Do not use multiple processors for compiling with MSVC
    -mp ................ Use multiple processors for compiling with MSVC (-MP).

    -loadconfig <config> Run configure with the parameters from file configure_
                         <config>.cache.
    -saveconfig <config> Run configure and save the parameters in file
                         configure_<config>.cache.
    -redo .............. Run configure with the same parameters as last time.

Qt for Windows CE only:

    -no-iwmmxt ......... Do not compile with use of IWMMXT instructions.
 +  -iwmmxt ............ Do compile with use of IWMMXT instructions. (Qt for
                         Windows CE on Arm only)

 *  -no-crt ............ Do not add the C runtime to default deployment rules.
    -qt-crt ............ Qt identifies C runtime during project generation.
    -crt <path> ........ Specify path to C runtime used for project generation.

    -no-cetest ......... Do not compile Windows CE remote test application.
 +  -cetest ............ Compile Windows CE remote test application.

    -signature <file> .. Use <file> for signing the target project.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Сентябрь 29, 2014, 21:16
Как хотя бы этот serialport присобачить?


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Сентябрь 29, 2014, 21:21
Как хотя бы этот serialport присобачить?

Извините, поспешил! Гуглом надо было сначала воспользоваться :)


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: Alex Custov от Сентябрь 30, 2014, 11:38
Я не смог поставить PowerShell на Win7:

PowerShell уже есть в виндах начиная с Windows 7.


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Сентябрь 30, 2014, 14:18
Я не смог поставить PowerShell на Win7:
PowerShell уже есть в виндах начиная с Windows 7.
Спасибо за информацию! Надо будет попробовать

Сейчас такая ситуация. Я собрал статически Qt. Собрал статически приложение MainWindow. Перехожу в папку release. Запускаю приложение. Требуются dll:
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll

Когда их добавляю в папку - запускается нормально.

Я перед конфигурированием заходил в папку "C:\Qt\Qt5.3.2\5.3\mingw482_32\mkspecs\win32-g++". Открывал файл "qmake.conf" и после знака "=" написал:
Цитировать
QMAKE_LFLAGS = -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc

Я не знаю, что за ключи идут после -static, но так чаще всего на форумах пишут.

Потом запустил консоль Qt. Перешёл в папку: cd C:\Qt\Qt5.3.2\5.3\Src\

Ввёл команду:
Код:
configure -static -platform win32-g++ -prefix "C:\Qt\Qt5.3.2_Static" -release -opensource -confirm-license -c++11 -nomake examples -nomake tests -opengl desktop -no-angle -no-vcproj -qt-sql-sqlite

Через минут 5 ввёл команду: mingw32-make

Через, примерно, 1.5 часа - эту команду: mingw32-make install

Потом зарегистрировал в Qt. Почему же эти три библиотеки не подцепились? Меня смущает эта строка:
Код:
QMAKE_LFLAGS_DLL        = -shared

Может её надо было тоже изменить на -static?

Код:
#
# qmake configuration for win32-g++
#
# Written for MinGW / gcc 4.6 or higher
#
# Cross compile example for i686-w64-mingw32-g++:
#   configure -xplatform win32-g++ -device-option CROSS_COMPILE=i686-w64-mingw32-
#

load(device_config)

MAKEFILE_GENERATOR      = MINGW
QMAKE_PLATFORM          = win32 mingw
CONFIG                 += debug_and_release debug_and_release_target precompile_header
DEFINES                += UNICODE
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o

QMAKE_COMPILER          = gcc

QMAKE_CC                = $${CROSS_COMPILE}gcc
QMAKE_LEX               = flex
QMAKE_LEXFLAGS          =
QMAKE_YACC              = byacc
QMAKE_YACCFLAGS         = -d
QMAKE_CFLAGS            = -pipe -fno-keep-inline-dllexport
QMAKE_CFLAGS_DEPS       = -M
QMAKE_CFLAGS_WARN_ON    = -Wall -Wextra
QMAKE_CFLAGS_WARN_OFF   = -w
QMAKE_CFLAGS_RELEASE    = -O2
QMAKE_CFLAGS_DEBUG      = -g
QMAKE_CFLAGS_YACC       = -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections
QMAKE_CFLAGS_SSE2       = -msse2 -mstackrealign
QMAKE_CFLAGS_SSE3       = -msse3
QMAKE_CFLAGS_SSSE3      = -mssse3
QMAKE_CFLAGS_SSE4_1     = -msse4.1
QMAKE_CFLAGS_SSE4_2     = -msse4.2
QMAKE_CFLAGS_AVX        = -mavx
QMAKE_CFLAGS_AVX2       = -mavx2
QMAKE_CFLAGS_IWMMXT     = -mcpu=iwmmxt
QMAKE_CFLAGS_NEON       = -mfpu=neon

QMAKE_CXX               = $${CROSS_COMPILE}g++
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS     = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG    = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC     = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD   = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON  = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_CXXFLAGS_CXX11    = -std=c++0x
QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS

QMAKE_INCDIR            =

QMAKE_RUN_CC            = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP        = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX           = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP       = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

QMAKE_LINK              = $${CROSS_COMPILE}g++
QMAKE_LINK_C            = $${CROSS_COMPILE}gcc
QMAKE_LFLAGS            = -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE    = -Wl,-s
QMAKE_LFLAGS_DEBUG      =
QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL        = -shared
QMAKE_LFLAGS_CXX11      =
QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
QMAKE_LINK_OBJECT_MAX   = 10
QMAKE_LINK_OBJECT_SCRIPT = object_script
QMAKE_PREFIX_STATICLIB  = lib
QMAKE_EXTENSION_STATICLIB = a

QMAKE_LIBS              =
QMAKE_LIBS_CORE         = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI          = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK      = -lws2_32
QMAKE_LIBS_OPENGL       = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_OPENGL_ES2   = -llibEGL -llibGLESv2 -lgdi32 -luser32
QMAKE_LIBS_OPENGL_ES2_DEBUG = -llibEGLd -llibGLESv2d -lgdi32 -luser32
QMAKE_LIBS_COMPAT       = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY     = -lmingw32 -lqtmain

!isEmpty(QMAKE_SH) {
    MINGW_IN_SHELL      = 1
    QMAKE_DIR_SEP       = /
    QMAKE_DIRLIST_SEP   = :
    include(../common/shell-unix.conf)
    # Because install's ability to set permissions is not relevant on Windows,
    # and git's msys does not provide it to start with.
    QMAKE_INSTALL_FILE    = cp -f
    QMAKE_INSTALL_PROGRAM = cp -f
} else {
    include(../common/shell-win32.conf)
}

QMAKE_IDL               = midl
QMAKE_LIB               = $${CROSS_COMPILE}ar -ru
QMAKE_RC                = $${CROSS_COMPILE}windres

QMAKE_STRIP             = $${CROSS_COMPILE}strip
QMAKE_STRIPFLAGS_LIB   += --strip-unneeded
QMAKE_OBJCOPY           = $${CROSS_COMPILE}objcopy
QMAKE_NM                = $${CROSS_COMPILE}nm -P
load(qt_config)


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Сентябрь 30, 2014, 16:23
Цитировать
Сейчас такая ситуация. Я собрал статически Qt. Собрал статически приложение MainWindow. Перехожу в папку release. Запускаю приложение. Требуются dll:
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll

Когда их добавляю в папку - запускается нормально.

Я перед конфигурированием заходил в папку "C:\Qt\Qt5.3.2\5.3\mingw482_32\mkspecs\win32-g++". Открывал файл "qmake.conf" и после знака "=" написал:
Цитировать
QMAKE_LFLAGS = -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
У меня есть такое предположение, что надо было написать вот так: +=


Название: Re: Инструкция для сборки приложений на Qt в один exe без зависимостей
Отправлено: 8Observer8 от Октябрь 01, 2014, 10:54
Всё по-прежнему, то есть требует: libgcc_s_dw2-1.dll, libstdc++-6.dll, libwinpthread-1.dll

Удовлетворён и этим результатам, так как с помощью программы Upx сжал exe с диалогом с 13 MB к 5 MB. Плюс ещё эти dll надо у exe положить:
- libgcc_s_dw2-1.dll - 117 KB
- libstdc++-6.dll - 970 KB
- libwinpthread-1.dll - 640

P.S. Переписал инструкцию. Убрал всё лишнее.


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 14, 2014, 12:40
Изменил название и написал, как сжать полученный exe (простое окно с кнопкой) c 14 МБайт до 5 МБайт с помощью программы upx


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 17, 2014, 13:45
Скажите пожалуйста, требуются или нет для статической сборки Qt 5.3.2 perl, ruby и python. А то в каких-то инструкциях пишут, что нужны, а в других об этом ничего не говорится.


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 17, 2014, 16:58
Без этого можно обойтись. Рекомендую поставить "Virtual Box", в нём Windows (у меня XP на виртуалке), а туда уже Qt с исходниками. Потом выполняйте инструкцию на виртуальной машине. Когда вам потребуется отправить другу свой exe-файл, то вы запустите "Virtual Box" -> "Windows XP" -> "Qt Creator" -> откроете проект (предварительно нужно расшарить диск через меню "Virtual Box") -> компилируете ваш проект со статической сборкой -> сжимаете ваш exe (c ~15 МБайт) с помощью upx (в ~5МБайт) -> помещаете в архив zip -> сам архив на Yandex.Disk -> правой кнопкой мыши по архиву -> выбираете "скопировать ссылку" -> отправляете другу


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 17, 2014, 17:07
Другу можно вот такое сообщение отправить:

Зацени новую версию змейки: https://yadi.sk/d/8jDtj7EucidNE

Хочу в 3D сделать, как здесь: https://yadi.sk/d/TX4qJ1TzcidhP

P.S. Исходники: https://github.com/8Observer8/SnakeIn10Minutes
Делал, как здесь: http://www.youtube.com/watch?v=GiZGEFBGgKU


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 19, 2014, 09:26
Странно. Сейчас нашёл инструкцию по сборке Qt for Windows - Building from Source | QtDoc 5.3 на qt-project.org (http://qt-project.org/doc/qt-5/windows-building.html). Там идёт ссылка на Qt for Windows - Requirements (
http://qt-project.org/doc/qt-5/windows-requirements.html)

Так вот там тоже говорится, требуются эти инструменты:

Building from Source

These tools are not needed to run Qt 5 applications, but they are required for building Qt 5 from source.

    ActivePerl - Install a recent version of ActivePerl (download page) and add the installation location to your PATH.
    Python - Install Python from the here and add the installation location to your PATH in order to be able to build Qt WebKit.
    Install Ruby from here and add the installation location to your PATH in order to be able to build Qt WebKit.

Причём, если Python и Ruby нужны только для WebKit, то Perl  судя по всему, требуется для всего остального.


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: Alex Custov от Ноябрь 19, 2014, 10:53
Скажите пожалуйста, требуются или нет для статической сборки Qt 5.3.2 perl, ruby и python. А то в каких-то инструкциях пишут, что нужны, а в других об этом ничего не говорится.

Требуются. После сборки Qt их можно удалить.


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 21, 2014, 09:55
Причём, если Python и Ruby нужны только для WebKit, то Perl  судя по всему, требуется для всего остального.
Ну вот смотрите. Я на виртуалку поставил Zver XP. Поставил Qt. Выполнил свою инструкцию. Qt собирает приложения статически. С WebKit ещё не пробовал собирать, он мне пока не нужен. Не знаю причём тут Python, Ruby и Perl


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 21, 2014, 11:29
Цитировать
Ну вот смотрите. Я на виртуалку поставил Zver XP. Поставил Qt. Выполнил свою инструкцию. Qt собирает приложения статически. С WebKit ещё не пробовал собирать, он мне пока не нужен. Не знаю причём тут Python, Ruby и Perl

Вот и я пока не понимаю. WebKit тоже пока не интересует. Т.е. Python и Ruby не нужны. А вот на Perl в каком-то конфигурационном файле натыкался. Там проверка есть - установлен или нет.
Надо будет попробовать с этими утилитами собрать и посмотреть в чём будет различие.



Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 22, 2014, 11:45
Да давно бы уже поставили Vitual Box, Zver XP на виртуалку, Qt, попробовали бы инструкцию, а потом может написали бы "ругнулся, что Perl нужен". А так это вилами по воде. У меня же собралось на чистой винде (врядли Zver ставит Perl)


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: Johnik от Ноябрь 22, 2014, 12:22
Да давно бы уже поставили Vitual Box, Zver XP на виртуалку, Qt, попробовали бы инструкцию, а потом может написали бы "ругнулся, что Perl нужен". А так это вилами по воде. У меня же собралось на чистой винде (врядли Zver ставит Perl)

qt 4 perl не требует
qt 5 в qt5\qtbase\configure.bat в первых же строках видно:
Код:
for %%C in (cl.exe icl.exe g++.exe perl.exe) do set %%C=%%~$PATH:C

if "%perl.exe%" == "" (
    echo Perl not found in PATH. Aborting. >&2
    exit /b 1
)


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 22, 2014, 12:55
Почему тогда у меня на голой винде собрался Qt5 без Perl?


Название: Re: Инструкция, как собрать приложение в один
Отправлено: Johnik от Ноябрь 22, 2014, 13:19
выполните test.bat:
Код:
@echo off
for %%C in (cl.exe icl.exe g++.exe perl.exe) do set %%C=%%~$PATH:C

if "%perl.exe%" == "" (
    echo Perl not found in PATH. Aborting. >&2
    exit /b 1
) else (
    echo %perl.exe%
)


Название: Re: Инструкция, как собрать приложение в один
Отправлено: 8Observer8 от Ноябрь 22, 2014, 14:50
выполните test.bat:
Код:
@echo off
for %%C in (cl.exe icl.exe g++.exe perl.exe) do set %%C=%%~$PATH:C

if "%perl.exe%" == "" (
    echo Perl not found in PATH. Aborting. >&2
    exit /b 1
) else (
    echo %perl.exe%
)

(http://i9.pixs.ru/storage/9/5/4/001png_4708144_14835954.png)


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: kambala от Ноябрь 22, 2014, 15:57
рекомендовать зверя к установке — идиотизм


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: 8Observer8 от Ноябрь 22, 2014, 16:05
рекомендовать зверя к установке — идиотизм
Для виртуальки сойдёт. Быстро ставится и не нужно заморачиваться с драйверами. У меня на Win7 почему-то Qt не собирается статически. Что у самого работает, и как сам делал, то и советую


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: xokc от Ноябрь 22, 2014, 17:31
Почему тогда у меня на голой винде собрался Qt5 без Perl?
Потому что perl там нужен для выгрузки исходников из репозитория. Если исходники загружены самостоятельно, то perl не нужен.


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 24, 2014, 15:52
У меня на Win7 почему-то Qt не собирается статически. Что у самого работает, и как сам делал, то и советую

У меня на Win7 собралось


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 24, 2014, 16:29
Потому что perl там нужен для выгрузки исходников из репозитория. Если исходники загружены самостоятельно, то perl не нужен.

Похоже, что @xokc прав.
В \qtbase\configure.bat:

Код:
if not exist %QTSRC%\.gitignore goto sconf

Если файла .gitignore нет, а его действительно нет (исходники или получены при установке Qt или загружены и распакованы отдельно), то код с использованием perl пропускается:

Код:
if "%perl.exe%" == "" (
    echo Perl not found in PATH. Aborting. >&2
    exit /b 1
)
if not exist mkspecs (
    md mkspecs
    if errorlevel 1 goto exit
)
perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir %QTDIR% %QTSRC%

Правда я так и не понял, что конкретно  выполняет скрипт syncqt.pl. Не нашёл там ничего похожего на скачивание из репозитория.


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 26, 2014, 13:43
Резюме по поводу необходимости инструментов perl, ruby и python.
1. Perl по всей видимости нужен, если нет заранее подготовленных исходников. Что в этом случае происходит - не пробовал. Возможно, как было указано выше, происходит доставка исходников из репозитория и их подготовка. В этом случае без Perl сборка в принципе не возможна.

2. Все три инструмента нужны для сборки WebKit. Если они не доступны выдаётся следующее предупреждение во время сборки:
Код:
cd qtwebkit\ && ( if not exist Makefile D:\Qt\5.3.2\5.3static\src\qtbase\bin\qmake D:\Qt\5.3.2\5.3static\src\qtwebkit\WebKit.pro -o Makefile ) && mingw32-make -f Makefile 
Info: creating cache file D:\Qt\5.3.2\5.3static\src\qtwebkit\.qmake.cache
"perl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
<...>
The WebKit build was disabled for the following reasons:
    * ICU is required. To build QtWebKit with Qt 5 you need to build Qt 5 with libICU support. Check for ICU support being mentioned in qtbase/config.summary.
    * QtWebKit cannot be built as a static library on this platform. Check your configuration in qtbase/config.summary.
    * Missing gperf from PATH
    * Missing perl from PATH
    * Missing bison from PATH
    * Missing ruby from PATH
    * Missing flex from PATH


Название: Re: Инструкция, как собрать приложение в один exe-файл и сжать его до мин. размера
Отправлено: SigMA от Ноябрь 26, 2014, 14:03
Рекомендации по сборке в дополнение к исходной инструкции.

Команды лучше запускать не непосредственно в консольном окне, а через командные пакетные файлы с перенаправлением вывода сообщений и ошибок в лог файл. В этом случае гораздо проще анализировать результаты выполнения команд.
Можно все команды объединить в один пакетный файл, а можно каждую выполнять в отдельном пакетном файле. Я делал вторым способом, чтобы можно было анализировать результат каждого процесса по мере завершения.

Пример командного файла:
Код:
cmd /c "configure.bat -static -release -platform win32-g++ -prefix %QtDir% -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite -no-openssl -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests" > %QtDir%\conf.log   2>&1
В данном случае выполняется конфигурирование с выводом результатов и ошибок в файл conf.log.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 18, 2014, 16:25
Переправил инструкцию под Qt 5.4


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 18, 2014, 16:39
У вас сейчас получаются полностью независимые программы по этой инструкции?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 18, 2014, 17:20
У вас сейчас получаются полностью независимые программы по этой инструкции?
Да, только рядом с exe должны быть эти библиотеки:
- libgcc_s_dw2-1.dll - 118 KB
- libstdc++-6.dll - 1,003 KB
- libwinpthread-1.dll - 48 КБ

Не совсеми модулями прокатывает. К примеру, если программа использует COM-порт, то уже не собирётся. При переключении на статический Release Qt Creator выдаст следующее:
Цитировать
Project ERROR: Unknown module(s) in QT: serialport

И ещё отмечу, что после статической сборки простейшего приложения с диалоговым окном, оно будет весить ~15 МБайт. Зато после сжатия его с помощью upx - будет весить ~5.5 MБайт

По GPL с приложением нужно поставлять и его исходники. Например:

MyApp:
- bin
-- Linux
-- Windows
- src


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 18, 2014, 17:23
Если кто встречал хорошую инструкцию для статической сборки под Linux Mint или Ubuntu, то дайте, пожалуйста, ссылку


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 18, 2014, 17:31
Не понимаю смысла в статической сборке. Тем более, под Линухом.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Alex Custov от Декабрь 18, 2014, 17:37
Не понимаю смысла в статической сборке. Тем более, под Линухом.

и в сжатии тоже. Возможно в каких-то исключительных случаях - да, но в общем - нет. Сжатое приложение стартует заметно медленнее, особенно если оно большое. Не думаю, что 10 Мб важнее скорости запуска.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 18, 2014, 17:39
А если следовать инструкции (http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW) из wiki, мы не получим желаемого эффекта?
Не понимаю смысла в статической сборке. Тем более, под Линухом.
Всякие delphi, которые создают единственный exe, извращают сознание. Когда с него перешёл на c++ и Qt - меня просто возмутило то, что у меня ещё какие-то левые файлы нужно таскать с прогой  ;D ;D


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 18, 2014, 17:45
Для меня есть смысл, так как у меня медленный интернет и мне легче отдать приложение, которое в архиве занимает 5 MБайт, чем 17 MБайт в архиве. Простое оконное приложение на Qt - это куча библиотек и более 40 МБайт


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 18, 2014, 17:47
Либы можно сделать отдельным пакетом и дать только один раз, зато потом прогу будешь килобайтную отдавать.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Alex Custov от Декабрь 18, 2014, 17:54
Для меня есть смысл, так как у меня медленный интернет и мне легче отдать приложение, которое в архиве занимает 5 MБайт, чем 17 MБайт в архиве. Простое оконное приложение на Qt - это куча библиотек и более 40 МБайт

а 7z с -mx9 разве не решит эту проблему? Ужимает в три раза. То же самое что и UPX, но без проблем со скоростью  запуска.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 18, 2014, 17:59
Либы можно сделать отдельным пакетом и дать только один раз, зато потом прогу будешь килобайтную отдавать.
А под линуксом вообще можно просто команду на установку qt передать заказчику


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 18, 2014, 18:01
А если следовать инструкции (http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW) из wiki, мы не получим желаемого эффекта?
Так вы пробовали?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 18, 2014, 18:25
А если следовать инструкции (http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW) из wiki, мы не получим желаемого эффекта?
Так вы пробовали?
Там только скрипт нужно запустить и он сам всё сделает. Я не помню почему, но у меня не получилось

По поводу времени запуска, то я не замечаю, что долго. А так можно и ту и другую сборку применять, для разных ситуаций


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 09:37
Попробовал собрать статически - жестоко долго думает...


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 09:40
- удаляем Qt 5.4 через панел задач

- удаляем папку C:\Qt\Qt5.4.0

- ставим заново Qt


Вам не кажется, что это как-то по хардкору  :)


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: gil9red от Декабрь 19, 2014, 09:48
- удаляем Qt 5.4 через панел задач

- удаляем папку C:\Qt\Qt5.4.0

- ставим заново Qt


Вам не кажется, что это как-то по хардкору  :)


В этих пунктах могло добавиться форматирование и переустановка винды :)


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: Пантер от Декабрь 19, 2014, 09:49
В этих пунктах могло добавиться форматирование и переустановка винды :)
Да чо мелочиться? Сразу комп меняйте. Или жизнь....


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Igors от Декабрь 19, 2014, 10:00
Всякие delphi, которые создают единственный exe, извращают сознание. Когда с него перешёл на c++ и Qt - меня просто возмутило то, что у меня ещё какие-то левые файлы нужно таскать с прогой  ;D ;D
А у нормальных людей на OSX есть концепция bundle :) Да еще и universal binary. И хорошим тоном считается отсутствие всяких инсталляций (если это не системная утилита).

Но если на Вындоуз этого нет - чего упираться? Практичнее согласиться с тем что "а здесь делают так". А то уже 5 листов исписали, а "бомба продолжает прыгать"


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 10:01
а что у нас происходит такого с процессом при запуске статически, что он так долго думает? У меня прога задействует сразу все свои причендалы кроме стандартных диалогов, но при динамической линковке открывается мгновенно.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Alex Custov от Декабрь 19, 2014, 10:04
а что у нас происходит такого с процессом при запуске статически, что он так долго думает? У меня прога задействует сразу все свои причендалы кроме стандартных диалогов, но при динамической линковке открывается мгновенно.

на это ответят только разрабы Qt. Я своё время отказался от статики по этой же причине.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 10:06
А у нормальных людей на OSX есть концепция bundle :) Да еще и universal binary. И хорошим тоном считается отсутствие всяких инсталляций (если это не системная утилита).
А что это? И как это без инсталляции? Все проги portable? С osx не имел дел.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: navrocky от Декабрь 19, 2014, 10:17
А у нормальных людей на OSX есть концепция bundle :) Да еще и universal binary. И хорошим тоном считается отсутствие всяких инсталляций (если это не системная утилита).
А что это? И как это без инсталляции? Все проги portable? С osx не имел дел.

Выглядит это так: скачиваешь 1 файлик, щелкаешь по нему, это оказывается образ диска, он монтируется и открывается окошко с файлами этого диска, там ты видишь приложение (которое на самом деле папка с файлами, bundle), тянешь его к себе на рабочий стол (это запуск инсталлятора). После этого может появиться мастер установки приложения (как в винде) а может и молча поставиться.

С точки зрения пользователя вроде проще, а с технической, по мне, как-то всё это странно.

Под bundle подразумевается папка с бинарём, всеми его зависимостями и метаинформацией.

Igors поправь пож. если я не прав.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 19, 2014, 10:23
- удаляем Qt 5.4 через панел задач

- удаляем папку C:\Qt\Qt5.4.0

- ставим заново Qt


Вам не кажется, что это как-то по хардкору  :)
Пока другого варианта не нашёл. А этот вполне рабочий

Цитировать
а что у нас происходит такого с процессом при запуске статически, что он так долго думает?
Если вы сжимали upx'ом, то, по-моему, перед запуском программа разжимается в оперативку. У меня предположение, что upx зашивает в exe некий алгоритм "разжимания". С небольшими приложениями запускается быстро. Возможно для больших приложений придётся использовать динамику

По поводу веса приложения. Примерный отрывок из цитаты противника Qt, когда я скинул кому-то небольшое приложение на 5 МБайт: "вот нужен будет калькулятор весом 5 МБайт, тогда и советуй свой Qt" Про почти 50 МБайт в динамике я промолчал


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Alex Custov от Декабрь 19, 2014, 10:30
Примерный отрывок из цитаты противника Qt, когда я скинул кому-то небольшое приложение на 5 МБайт: "вот нужен будет калькулятор весом 5 МБайт, тогда и советуй свой Qt" Про почти 50 МБайт в динамике я промолчал

Так он профессионально разработкой калькуляторов занимается? ;D На чём именно он пишет? Просто интересно. Подозреваю очередного адепта Делфи, пишущего для Windows-only.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 19, 2014, 10:35
Вы, блин, сравните еще с прогой на Шарпе. Мизер весит. Вот только никто не учитывает, что надо сначала 200-300 метров .Net поставить.
В общем, если пиплы так возмущаются размером софта, делай динамическую линковку, но Кьютовые либы пихай отдельным дистром. ИМХО, вполне нормально. Те же рантаймы студии идут отдельно.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 10:44
- удаляем Qt 5.4 через панел задач

- удаляем папку C:\Qt\Qt5.4.0

- ставим заново Qt


Вам не кажется, что это как-то по хардкору  :)
Пока другого варианта не нашёл. А этот вполне рабочий
Что вы этим действием хотите сделать?

Вот только никто не учитывает, что надо сначала 200-300 метров .Net поставить.
Ну да, можно либы Qt оформить в виде отдельного инсталлятора - ни чем не хуже получится  :)


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 19, 2014, 10:48
А делфи меньше из-за того, что кот не кроссплатформенный. Плюс, паскаль.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 10:49
Плюс, паскаль.
Не понял


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 19, 2014, 10:50
На сколько я помню, паскалевские проги меньше места занимают. Могу и ошибаться.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 10:59
С точки зрения пользователя вроде проще, а с технической, по мне, как-то всё это странно.
Проще чем что?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Igors от Декабрь 19, 2014, 11:03
а что у нас происходит такого с процессом при запуске статически, что он так долго думает? У меня прога задействует сразу все свои причендалы кроме стандартных диалогов, но при динамической линковке открывается мгновенно.
Потому что динамические либы кешируются в памяти, а статик каждый раз все с нуля.

Igors поправь пож. если я не прав.
Да все так, инсталлер формальный, чисто для солидности, он предлагает скопировать - что можно было с тем же успехом сделать и без него. Я к тому что на каждой ОС так или иначе сложился порядок как что делать, пытаться по-другому - не преступление, но и выгод не видно.

Те же рантаймы студии идут отдельно.
Вот-вот. И чего добиваемся статикой если все равно что-то надо ставить? А перекомпилить все используемые либы multi-threaded (НЕ DLL) - себе дороже

Почему хочется статик - хорошо понятно. "Вот я "соберу" - и везде работает, никаких гвоздей!". Но при этом "радость  (пере) сборки" получаем всякий раз когда хоть одна либа изменилась. После неск таких упражнений любовь к статике проходит


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 11:18
Если вы сжимали upx'ом, то ...
Не, я его не использовал. Но он бы ещё дал бы мне подождать.
Лучше, действительно, воспользоваться 7z для передачи. А экономить на размере исполнителя для систем под управлением Windows, ИМХО, в наше время не особо востребовано. Ну будет он 5мб вместо 20 - придется стереть пару mp3, если вообще голяк  :), зато не так долго ждать запуска.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 19, 2014, 11:22
А если один порнофильм удалить, то таких прог вообще можно зоопарк держать. (Как говаривал один мой знакомый, если у вас пол винта не забита порнухой, значит, вы не умеете им пользоваться).
В наше время экономить на дисковом пространстве моветон. Винты в терабайт вполне себе доступны по цене. А софт можно не отправлять, а выкладывать в облаке и давать сцыль.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 11:23
динамические либы кешируются в памяти
А при перезапуске системы кешируются?
Я имею в виду pagefile


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 19, 2014, 11:26
динамические либы кешируются в памяти
А при перезапуске системы кешируются?
Я имею в виду pagefile
С чего бы? Файл подкачки может вообще очищаться при запуске системы. Либы кешируются при первой их загрузке.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 11:27
С чего бы? Файл подкачки может вообще очищаться при запуске системы. Либы кешируются при первой их загрузке.
Интересуюсь... Ну мало ли... В винде по умолчанию не вычищается.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Igors от Декабрь 19, 2014, 12:02
А при перезапуске системы кешируются?
Я имею в виду pagefile
Нет, часто заметно что "первый запуск" значительно дольше


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: Пантер от Декабрь 19, 2014, 12:05
Можно самому замутить кеширование - поргу, которая юзает либы добавить в автозапуск. В итоге, после загрузки винды либы будут уже подгружены.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 19, 2014, 12:21
Так он профессионально разработкой калькуляторов занимается? ;D На чём именно он пишет? Просто интересно. Подозреваю очередного адепта Делфи, пишущего для Windows-only.
Про калькулятор написала одна особа, которая занимается изучением OpenGL и шейдеров. Страшно ненавидит Qt и бесится, если кто-то упоминает о нём. Пишет на WinAPI (на линуксе, вроде, она тоже на чём-то пишет). Вот случайно её пример сохранился:


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 19, 2014, 12:22
- удаляем Qt 5.4 через панел задач

- удаляем папку C:\Qt\Qt5.4.0

- ставим заново Qt


Вам не кажется, что это как-то по хардкору  :)
Пока другого варианта не нашёл. А этот вполне рабочий
Что вы этим действием хотите сделать?
Убрать "грязь" после сборки


Вы, блин, сравните еще с прогой на Шарпе. Мизер весит. Вот только никто не учитывает, что надо сначала 200-300 метров .Net поставить.
Меня заставили сравнить с Visual Basic (я по ошибке туда попал). Пролистайте до моего сообщения: http://www.cyberforum.ru/visual-basic/thread1294084.html

Аргумент в пользу статики: на киберфоруме ограничение на прикрепляемый файл 10 MБайт. Такой может быть мой ответ в какой-нибудь теме: вот мой вариант этой игрушки. Оцените. Либо: мой вариант приложения (были нередко случаи, когда человеку нужно небольшое приложение и он пишет в личку за доработкой). Человек быстренько скачал. Без всяких вопросов запустил и попробовал. Если дать ссылку на архив 20 МБайт (Yandex.Disk или Google.Drive), а при разархивировании он будет 50 МБайт, то это вызывает шок: "как это так? такое маленькое приложение, а столько весит?!" На мой взгляд лучше дублировать, то есть один архив загружать на сам форум, а другой хранить на Yandex.Disk или Google.Drive и давать ссылку. Польза в том, что моё приложение не пропадёт, если я изменю ссылку на дисках яндекс и гугл

Но на этих дисках размер ограничен. Это можно обойти. Для того, чтобы не дублировать файлы я могу хранить общие dll в отдельном архиве. И это, кстати, будет намного экономнее, чем статическая сборка, получается  :-\ Пользователю нужно будет кинуть две ссылки на общие dll и на архив с exe (вместе с дополнительными dll). Правда, приходится объяснять, что для запуска нужно exe кинуть к dll (или наоборот). Частенько это вызывает проблемы. Это довольно нестандартное решение для маленького оконного приложения. И когда человек наконец-то понял, что dll должны лежать именно рядом с exe (а не в папочке dlls, как он скачал). Должна быть маленькая инструкция (для примеров и небольших приложений - установку я исключаю). И вот он видит, что это маленькое оконное приложение состоит из кучи библиотек и занимает почти 50 МБайт - обычно это вызывает небольшой шок. Поэтому для маленьких приложений я делаю статическую сборку


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 19, 2014, 12:38
Убрать "грязь" после сборки
А где эта грязь происходит конкретно? В каких папках?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Пантер от Декабрь 19, 2014, 12:39
Так он профессионально разработкой калькуляторов занимается? ;D На чём именно он пишет? Просто интересно. Подозреваю очередного адепта Делфи, пишущего для Windows-only.
Про калькулятор написала одна особа, которая занимается изучением OpenGL и шейдеров. Страшно ненавидит Qt и бесится, если кто-то упоминает о нём. Пишет на WinAPI (на линуксе, вроде, она тоже на чём-то пишет). Вот случайно её пример сохранился:

Ненавижу такие простыни. Буэээ.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: Пантер от Декабрь 19, 2014, 12:42
8Observer8, да сделай ты просто инсталлятор в том же Inno Setup для Кьютовых либ, который будет их куда-нибудь инсталлить и в PATH прописывать. Тогда вообще ничего пользователю делать не надо будет.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 19, 2014, 12:50
Цитировать
да сделай ты просто инсталлятор в том же Inno Setup для Кьютовых либ, который будет их куда-нибудь инсталлить и в PATH прописывать. Тогда вообще ничего пользователю делать не надо будет
Не знаю как организавать это. С одной стороны, если пользователь поставил, то для обновления я могу ему exe кидать. Но с другой, как я буду хранить эти приложения на дисках для раздачи?

Убрать "грязь" после сборки
А где эта грязь происходит конкретно? В каких папках?
Я понял, к чему вы клоните. Грязь, скорее всего, в папке с исходниками. Будем считать, что переустановка Qt - это восстановление исходников и config-файла. У меня ещё приложение одно перестало запускаться, как оказалось это не потому что было что-то испорчено. Да, согласен, что переустанавливать Qt - это слишком, но мне так проще было. Надо подумать, как лучше

Я там про ошибки ещё писал, которые проигнорировал. И текст их привёл. Кто-нибудь может пояснить, что это такое и как от них избавиться?



Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Igors от Декабрь 19, 2014, 12:56
Про калькулятор написала одна особа, которая занимается изучением OpenGL и шейдеров. Страшно ненавидит Qt и бесится, если кто-то упоминает о нём. Пишет на WinAPI (на линуксе, вроде, она тоже на чём-то пишет). Вот случайно её пример сохранился:
Очень даже симпатично, а для девчонки вообще прекрасно. Не гадит эксепшнами, не сует std куда ни попадя, в общем - делом занимается, а не халтурит как некоторые  :)


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 19, 2014, 13:10
Про калькулятор написала одна особа, которая занимается изучением OpenGL и шейдеров. Страшно ненавидит Qt и бесится, если кто-то упоминает о нём. Пишет на WinAPI (на линуксе, вроде, она тоже на чём-то пишет). Вот случайно её пример сохранился:
Ненавижу такие простыни. Буэээ.
По поводу ненависти к Qt той особы (и не только её). Про мнения о сочетании Qt обёрток и OpenGL почитайте мою тему: http://www.gamedev.ru/code/forum/?id=195948

P.S. Мне хочется, чтобы мы не тратили время на доказательства, что Qt не дерьмо. Лучше делом доказывать в виде продуктов своего труда


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: __Heaven__ от Декабрь 19, 2014, 13:52
Я понял, к чему вы клоните. Грязь, скорее всего, в папке с исходниками. Будем считать, что переустановка Qt - это восстановление исходников и config-файла. У меня ещё приложение одно перестало запускаться, как оказалось это не потому что было что-то испорчено. Да, согласен, что переустанавливать Qt - это слишком, но мне так проще было. Надо подумать, как лучше
Ну да. Я сделал резерв qmake.conf и папки src.
К слову, src копируется долго из-за мелких файлов, поэтому как только винда построила карту копирования и приступила к непосредственному копированию я запустил configure, чтобы время не терять.
После установки можно затереть свои изменения и вернуть всё как было.
А ещё проще после установки сделать mingw32-make clean...

Я там про ошибки ещё писал, которые проигнорировал. И текст их привёл. Кто-нибудь может пояснить, что это такое и как от них избавиться?
Вы так написали, как будто это нормально, что он сыпет ошибки


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: 8Observer8 от Декабрь 19, 2014, 14:36
Ну да. Я сделал резерв qmake.conf и папки src.
Спасибо! Исправил

Вначале инструкции добавил:

- переходим в каталог "C:\Qt\Qt5.4.0\5.4\mingw491_32\mkspecs\win32-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\win32-g++\qmake.conf и восстанавливаем резервный "qmake.conf"

- удаляем каталог C:\Qt\Qt5.4.0\5.4\Src и восстанавливаем резервный


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: 8Observer8 от Декабрь 19, 2014, 14:40
Я там про ошибки ещё писал, которые проигнорировал. И текст их привёл. Кто-нибудь может пояснить, что это такое и как от них избавиться?
Вы так написали, как будто это нормально, что он сыпет ошибки
Что с ошибками будем делать? Я предложил игнорировать, но это только на руку ненавистника Qt. Да, а больше всего хочется, чтобы красиво собралось. Или хотя бы точно знать, что эти ошибки не влияют ни на что (я почти на 100% уверен, что не влияют) Кто не видел ошибки, то посмотрите в первом сообщении с инструкцией. Ошибки выбрасываются в самом конце сборки


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: 8Observer8 от Декабрь 19, 2014, 15:25
8Observer8, да сделай ты просто инсталлятор в том же Inno Setup для Кьютовых либ, который будет их куда-нибудь инсталлить и в PATH прописывать. Тогда вообще ничего пользователю делать не надо будет.
То есть у меня отдельно будет инсталятор для общих либ, а новый пользователь может один раз поставить эти либы и потом скачивать мои приложения в виде лёгкого exe (ну и возможно парочки либ). Я правильно понял идею?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: Пантер от Декабрь 19, 2014, 15:26
8Observer8, да сделай ты просто инсталлятор в том же Inno Setup для Кьютовых либ, который будет их куда-нибудь инсталлить и в PATH прописывать. Тогда вообще ничего пользователю делать не надо будет.
То есть у меня отдельно будет инсталятор для общих либ, а новый пользователь может один раз поставить эти либы и потом скачивать мои приложения в виде лёгкого exe (ну и возможно парочки либ). Я правильно понял идею?
Совершенно верно.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: dukebarman от Январь 08, 2015, 15:08
Цитировать
Примечание. У меня почему-то сохранилась зависимость от трёх следующих библиотек. В папки с приложениями мне приходится добавлять:
- libgcc_s_dw2-1.dll - 118 KB
- libstdc++-6.dll - 1,003 KB
- libwinpthread-1.dll - 48 КБ

Проблема решается добавлением флагов в файл проекта (*.pro):

Код:
QMAKE_LFLAGS += -static -static-libgcc


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Январь 08, 2015, 17:30
Цитировать
Примечание. У меня почему-то сохранилась зависимость от трёх следующих библиотек. В папки с приложениями мне приходится добавлять:
- libgcc_s_dw2-1.dll - 118 KB
- libstdc++-6.dll - 1,003 KB
- libwinpthread-1.dll - 48 КБ

Проблема решается добавлением флагов в файл проекта (*.pro):

Код:
QMAKE_LFLAGS += -static -static-libgcc

Спасибо! Исправил. Где ж вы раньше были :)

Обнаружил такую проблему, что приложения собранные Qt 32 bit на Wip7 64bit не запускаются на Win XP 32 bit. Они просто не запускаются, без всяких сообщений. Это относится и к shared-приложениям. Придётся для пользователей собирать на виртуалке с XP. А то вдруг у кого-то есть компьютер с XP, как у меня


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: kambala от Январь 08, 2015, 18:50
зависимости проверь в shared


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Январь 08, 2015, 20:03
зависимости проверь в shared
А как это? Я не понял. Если бы какой-то dll не хватало, то вылезло бы сообщение


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: kambala от Январь 08, 2015, 21:01
всякое бывает. лучше лишний раз убедиться, что нужные длл на месте.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Январь 11, 2015, 07:00
Пытаюсь собрать Qt статически на Linux Mint 13 по этой инструкции: http://help.ubuntu.ru/wiki/qt_static

Вот мои шаги. Поставил Mint. Ввёл команду:

Цитировать
sudo apt-get install build-essential ^libxcb.* libx11-xcb-dev libglu1-mesa-dev libxrender-dev libfontconfig1-dev

Ввожу команду конфигурирования:
Цитировать
./configure -prefix "/home/ivan/Qt5.4.0_Static" -static -platform linux-g++ -release -opensource -confirm-license -fontconfig -no-compile-examples -nomake examples -nomake tests -nomake tools -opengl desktop -qt-sql-sqlite -make libs -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype

Результат конфигурирования:

Цитировать
Configure summary

Build type:    linux-g++ (i386, CPU features: none detected)

Build options:
  Configuration .......... accessibility accessibility-atspi-bridge audio-backend avx c++11 clock-gettime clock-monotonic concurrent evdev eventfd fontconfig full-config getaddrinfo getifaddrs gif harfbuzz iconv inotify ipv6ifname jpeg large-config largefile linuxfb medium-config minimal-config mremap nis opengl pcre png posix_fallocate precompile_header qpa qpa reduce_exports reduce_relocations release rpath small-config sse2 sse3 sse4_1 sse4_2 ssse3 static system-freetype xcb xcb-glx xcb-plugin xcb-render xcb-xlib xkbcommon-qt xlib xrender zlib
  Build parts ............  libs
  Mode ................... release
  Using C++11 ............ yes
  Using gold linker....... no
  Using PCH .............. yes
  Target compiler supports:
    SSE2/SSE3/SSSE3 ...... yes/yes/yes
    SSE4.1/SSE4.2 ........ yes/yes
    AVX/AVX2 ............. yes/no

Qt modules and options:
  Qt D-Bus ............... runtime
  Qt Concurrent .......... yes
  Qt GUI ................. yes
  Qt Widgets ............. yes
  Large File ............. yes
  QML debugging .......... yes
  Use system proxies ..... no

Support enabled for:
  Accessibility .......... yes
  ALSA ................... no
  CUPS ................... no
  Evdev .................. yes
  FontConfig ............. yes
  FreeType ............... yes (system library)
  Glib ................... no
  GTK theme .............. no
  HarfBuzz ............... yes (bundled copy)
  Iconv .................. yes
  ICU .................... no
  Image formats:
    GIF .................. yes (in QtGui, using bundled copy)
    JPEG ................. yes (in QtGui, using bundled copy)
    PNG .................. yes (in QtGui, using bundled copy)
  journald ............... no
  mtdev .................. no
  Networking:
    getaddrinfo .......... yes
    getifaddrs ........... yes
    IPv6 ifname .......... yes
    OpenSSL .............. no
  NIS .................... yes
  OpenGL / OpenVG:
    EGL .................. no
    OpenGL ............... desktop
    OpenVG ............... no
  PCRE ................... yes (bundled copy)
  pkg-config ............. yes
  PulseAudio ............. no
  QPA backends:
    DirectFB ............. no
    EGLFS ................ no
    KMS .................. no
    LinuxFB .............. yes
    XCB .................. yes (system library)
      EGL on X ........... no
      GLX ................ yes
      MIT-SHM ............ yes
      Xcb-Xlib ........... yes
      Xcursor ............ yes (loaded at runtime)
      Xfixes ............. yes (loaded at runtime)
      Xi ................. yes (loaded at runtime)
      Xi2 ................ no
      Xinerama ........... yes (loaded at runtime)
      Xrandr ............. yes (loaded at runtime)
      Xrender ............ yes
      XKB ................ no
      XShape ............. yes
      XSync .............. yes
      XVideo ............. yes
  Session management ..... yes
  SQL drivers:
    DB2 .................. no
    InterBase ............ no
    MySQL ................ no
    OCI .................. no
    ODBC ................. no
    PostgreSQL ........... no
    SQLite 2 ............. no
    SQLite ............... qt-qt
    TDS .................. no
  udev ................... no
  xkbcommon .............. yes (bundled copy, XKB config root: /usr/share/X11/xkb)
  zlib ................... yes (bundled copy)


WARNING: Using static linking will disable the use of dynamically
loaded plugins. Make sure to import all needed static plugins,
or compile needed modules into the library.
Info: creating super cache file /home/ivan/Qt5.4.0/5.4/Src/.qmake.super

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /home/ivan/Qt5.4.0_Static

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

Ввожу команду make и через 20 минут получаю ошибку: "Project ERROR: Unknown module(s) in QT: dbus"

Цитировать
rm -f ../../lib/libQt5Gui.a
mv -f libQt5Gui.a ../../lib/
make[3]: Leaving directory `/home/ivan/Qt5.4.0/5.4/Src/qtbase/src/gui'
cd platformheaders/ && ( test -e Makefile || /home/ivan/Qt5.4.0/5.4/Src/qtbase/bin/qmake /home/ivan/Qt5.4.0/5.4/Src/qtbase/src/platformheaders/platformheaders.pro -o Makefile ) && make -f Makefile
make[3]: Entering directory `/home/ivan/Qt5.4.0/5.4/Src/qtbase/src/platformheaders'
make[3]: Nothing to be done for `first'.
make[3]: Leaving directory `/home/ivan/Qt5.4.0/5.4/Src/qtbase/src/platformheaders'
cd platformsupport/ && ( test -e Makefile || /home/ivan/Qt5.4.0/5.4/Src/qtbase/bin/qmake /home/ivan/Qt5.4.0/5.4/Src/qtbase/src/platformsupport/platformsupport.pro -o Makefile ) && make -f Makefile
Project ERROR: Unknown module(s) in QT: dbus
make[2]: *** [sub-platformsupport-make_first] Error 3
make[2]: Leaving directory `/home/ivan/Qt5.4.0/5.4/Src/qtbase/src'
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory `/home/ivan/Qt5.4.0/5.4/Src/qtbase'
make: *** [module-qtbase-make_first] Error 2

Помогите, пожалуйста, исправить ошибку


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: GRomR1 от Январь 20, 2015, 11:12
Ввожу команду конфигурирования:
Цитировать
./configure -prefix "/home/ivan/Qt5.4.0_Static" -static -platform linux-g++ -release -opensource -confirm-license -fontconfig -no-compile-examples -nomake examples -nomake tests -nomake tools -opengl desktop -qt-sql-sqlite -make libs -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype

Помогите, пожалуйста, исправить ошибку
Попробуй  
Код:
./configure  -no-dbus  ......

Подробности:
   -no-dbus ........... Do not compile in D-Bus support.
+  -dbus .............. Compile in D-Bus support and load libdbus-1
                        dynamically.
   -dbus-linked ....... Compile in D-Bus support and link to libdbus-1.

Еще советую вместо команды
Код:
mingw32-make 
Использовать:
Код:
mingw32-make -j4
для распараллеливания компиляции на 4 потока, будет быстрее.

А теперь о моих проблемах.
Что за фигня? Уже третий день пытаюсь Qt статически собрать.
Пробовал через их ps-скрипт - ошибка как тут: http://qt-project.org/forums/viewthread/51597 (http://qt-project.org/forums/viewthread/51597)
Пробовал по данной инструкции - все собралось и установилось (ошибки есть, но здесь сказано, что они не критичны), и опять же ничего не работает.
Creator усердно говорит, что "qmlscene не установлен", и отказывается хоть какой-нибудь проект до конца скомпилировать.
ОС Windows 7 x64
на x86 аналогично

вот последние строки mingw32-make install
g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -fno-exceptions -frtti -W
all -Wextra -DUNICODE -DQT_QML_DEBUG_NO_WARNING -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG
 -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -
I"..\..\include" -I"..\..\include\QtQml" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include
" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtNetwork" -I"C:\Qt\Qt5.4.0\5.4\Src\qt
base\include\QtCore\5.4.0" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtCore\5.4.0\
QtCore" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtWidgets" -I"C:\Qt\Qt5.4.0\5.4\
Src\qtbase\include\QtGui" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtCore" -I".mo
c\release" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\mkspecs\win32-g++" -o .obj\release\qr
c_qml.o .rcc\release\qrc_qml.cpp
C:\Qt\Qt5.4.0\5.4\Src\qtbase\bin\moc.exe -DUNICODE -DQT_QML_DEBUG_NO_WARNING -DQ
T_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_WIDGETS_LIB -DQ
T_GUI_LIB -DQT_CORE_LIB -D__GNUC__ -DWIN32 -IC:/Qt/Qt5.4.0/5.4/Src/qtbase/mkspec
s/win32-g++ -IC:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/tools/qml -IC:/Qt/Qt5.4.0/5.4/
Src/qtdeclarative/include -IC:/Qt/Qt5.4.0/5.4/Src/qtdeclarative/include/QtQml -I
C:/Qt/Qt5.4.0/5.4/Src/qtbase/include -IC:/Qt/Qt5.4.0/5.4/Src/qtbase/include/QtNe
twork -IC:/Qt/Qt5.4.0/5.4/Src/qtbase/include/QtCore/5.4.0 -IC:/Qt/Qt5.4.0/5.4/Sr
c/qtbase/include/QtCore/5.4.0/QtCore -IC:/Qt/Qt5.4.0/5.4/Src/qtbase/include/QtWi
dgets -IC:/Qt/Qt5.4.0/5.4/Src/qtbase/include/QtGui -IC:/Qt/Qt5.4.0/5.4/Src/qtbas
e/include/QtCore conf.h -o .moc\release\moc_conf.cpp
g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -fno-exceptions -frtti -W
all -Wextra -DUNICODE -DQT_QML_DEBUG_NO_WARNING -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG
 -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -
I"..\..\include" -I"..\..\include\QtQml" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include
" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtNetwork" -I"C:\Qt\Qt5.4.0\5.4\Src\qt
base\include\QtCore\5.4.0" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtCore\5.4.0\
QtCore" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtWidgets" -I"C:\Qt\Qt5.4.0\5.4\
Src\qtbase\include\QtGui" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\include\QtCore" -I".mo
c\release" -I"C:\Qt\Qt5.4.0\5.4\Src\qtbase\mkspecs\win32-g++" -o .obj\release\mo
c_conf.o .moc\release\moc_conf.cpp
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/
qtimageformats/plugins/imageformats -lqdds -lqicns -lqjp2 -lqmng -lqtga -lqtiff
-lqwbmp -lqwebp -LC:/Qt/Qt5.4.0/5.4/Src/qtbase/plugins/imageformats -lqico -lQt5
Gui -lcomdlg32 -loleaut32 -limm32 -lwinmm -lglu32 -lopengl32 -lgdi32 -lqtharfbuz
zng -lQt5Core -lole32 -luuid -lws2_32 -ladvapi32 -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:228: recipe for target 'module-qtdeclarative-install_subtargets' failed

mingw32-make: *** [module-qtdeclarative-install_subtargets] Error 2


Проблема решена. Поставил ActivePerl и Python, прописал их в PATH, и сборка собралась. Наверно в них дело, или звезды так легли.
Почему об этом правда нигде не написано?

З.Ы. как использовать спойлеры на данном сайте?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. р&#
Отправлено: TeX от Февраль 09, 2015, 17:33
Всем Привет !
Дабы не плодить лишних тем - пишу сюда.
Пытаюсь пересобрать Qt для компиляции под ARM.
Все установил по инструкции, настроил и прописал.
Запускаю конфигурирование так:
Код:
configure -static -embedded -platform win32-g++ -xplatform linux-arm-gnueabihf-g++ -prefix "C:\Qt\Qt540_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
Конфигурирование проходит без ошибок, вот окончание текста конфигурирования:
Цитировать
This is the Qt for Windows Open Source Edition.

You have already accepted the terms of the license.

Creating qmake...
mingw32-make: Nothing to be done for 'first'.
Running configuration tests...
Environment:
    INCLUDE=
      Unset
    LIB=
      Unset
    PATH=
      C:\Qt\Qt540\5.4\mingw491_32\bin
      C:\Qt\Qt540\Tools\mingw491_32\bin
      C:\Perl64\site\bin
      C:\Perl64\bin
      C:\Python27\
      C:\Python27\Scripts
      C:\Program Files (x86)\CollabNet
      C:\Program Files (x86)\Embarcadero\Studio\15.0\bin
      C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl
      C:\Program Files (x86)\Embarcadero\Studio\15.0\bin64
      C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl\Win64
      C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
      C:\Windows\system32
      C:\Windows
      C:\Windows\System32\Wbem
      C:\Windows\System32\WindowsPowerShell\v1.0\
      C:\Program Files (x86)\QuickTime\QTSystem\
      C:\linaro\bin
      C:\linaro\
      %APPDATA%\Python\Scripts
Configuration:
    pcre
    release
    compile_examples
    cross_compile
Qt Configuration:
    minimal-config
    small-config
    medium-config
    large-config
    full-config
    release
    c++11
    static
    zlib
    gif
    jpeg
    png
    freetype
    harfbuzz
    accessibility
    opengl
    opengles2
    egl
    audio-backend
    native-gestures
    qpa
    eventfd
    concurrent
    rpath

QMAKESPEC...................linux-arm-gnueabihf-g++ (commandline)
Architecture................arm, features:
Host Architecture...........i386, features:
Maketool....................mingw32-make
Debug.......................no
Force debug info............no
C++11 support...............yes
Link Time Code Generation...no
Accessibility support.......yes
RTTI support................yes
SSE2 support................no
SSE3 support................no
SSSE3 support...............no
SSE4.1 support..............no
SSE4.2 support..............no
AVX support.................no
AVX2 support................no
NEON support................no
OpenGL support..............yes
Large File support..........yes
NIS support.................no
Iconv support...............no
Evdev support...............no
Mtdev support...............no
Inotify support.............no
eventfd(7) support..........yes
Glib support................no
CUPS support................no
OpenVG support..............no
SSL support.................no
OpenSSL support.............no
Qt D-Bus support............no
Qt Widgets module support...yes
Qt GUI module support.......yes
QML debugging...............yes
DirectWrite support.........no
Use system proxies..........no

QPA Backends:
    GDI.....................yes
    Direct2D................no

Third Party Libraries:
    ZLIB support............qt
    GIF support.............yes
    JPEG support............yes
    PNG support.............yes
    FreeType support........yes
    Fontconfig support......no
    HarfBuzz support........qt
    PCRE support............qt
    ICU support.............no
    ANGLE...................no
    Dynamic OpenGL..........no

Styles:
    Windows.................yes
    Windows XP..............no
    Windows Vista...........no
    Fusion..................yes
    Windows CE..............no
    Windows Mobile..........no

Sql Drivers:
    ODBC....................no
    MySQL...................no
    OCI.....................no
    PostgreSQL..............no
    TDS.....................no
    DB2.....................no
    SQLite..................yes (qt)
    SQLite2.................no
    InterBase...............no

Sources are in..............C:\Qt\Qt540\5.4\Src\qtbase
Build is done in............C:\Qt\Qt540\5.4\Src\qtbase
Install prefix..............C:\Qt\Qt540_static
Headers installed to........C:\Qt\Qt540_static\include
Libraries installed to......C:\Qt\Qt540_static\lib
Arch-dep. data to...........C:\Qt\Qt540_static
Plugins installed to........C:\Qt\Qt540_static\plugins
Library execs installed to..C:\Qt\Qt540_static\bin
QML1 imports installed to...C:\Qt\Qt540_static\imports
QML2 imports installed to...C:\Qt\Qt540_static\qml
Binaries installed to.......C:\Qt\Qt540_static\bin
Arch-indep. data to.........C:\Qt\Qt540_static
Docs installed to...........C:\Qt\Qt540_static\doc
Translations installed to...C:\Qt\Qt540_static\translations
Examples installed to.......C:\Qt\Qt540_static\examples
Tests installed to..........C:\Qt\Qt540_static\tests
WARNING: Using static linking will disable the use of plugins.
         Make sure you compile ALL needed modules into the library.



Qt is now configured for building. Just run mingw32-make.
To reconfigure, run mingw32-make confclean and configure.
Делаю
Код:
mingw32-make
несколько секунд тишина и снова командная строка.
Сделал с дебагом в файл
Код:
mingw32-make -d >>debug
в файл много чего вывалило, но ничего, что указывает на ошибки.
Вот концовка файла:
Цитировать
Creating temporary batch file C:\Users\admin\AppData\Local\Temp\make4612-1d.bat
Batch file contents:
   @echo off
   test -d qtdoc\ || mkdir -p qtdoccd qtdoc\ && ( test -e Makefile || C:\Qt\Qt540\5.4\Src\qtbase\bin\qmake C:\Qt\Qt540\5.4\Src\qtdoc\qtdoc.pro -o Makefile ) && mingw32-make -f Makefile
CreateProcess(C:\Users\admin\AppData\Local\Temp\make4612-1d.bat,C:\Users\admin\AppData\Local\Temp\make4612-1d.bat,...)
Putting child 00537BE8 (module-qtdoc-make_first) PID 5457712 on the chain.
Live child 00537BE8 (module-qtdoc-make_first) PID 5457712
Reaping winning child 00537BE8 PID 5457712
Cleaning up temp batch file C:\Users\admin\AppData\Local\Temp\make4612-1d.bat
Removing child 00537BE8 PID 5457712 from chain.
    Successfully remade target file 'module-qtdoc-make_first'.
    Pruning file 'FORCE'.
   Finished prerequisites of target file 'make_first'.
  Must remake target 'make_first'.
  Successfully remade target file 'make_first'.
 Finished prerequisites of target file 'first'.
Must remake target 'first'.
Successfully remade target file 'first'.
Подскажите, в чем может быть проблема ?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Февраль 20, 2015, 17:11
Добавил в инструкцию примечание:

Примечание. После того, как соберёте по инструкции ниже посмотрите, как использовать сборку на практике: Создание оконного приложения на С++ (Qt). Запуск приложения на компьютере пользователя в релизе (http://"http://www.youtube.com/watch?v=zoLzkaLA7Co&feature=youtu.be")


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Tan4ek от Март 03, 2015, 00:04
Сделал все как в гайде, но на другом компе, приложение не открывается, в диспетчере есть, а окно не появляется. Что может быть причиной?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: klio от Март 04, 2015, 09:40
а не подскажете что у вас с serialport получилось? на второй странице есть отсылка что вы в гугле посмотрели, а каков результат не отписались (ну или я зевнул). уже третий день пошёл как пытаюсь разобраться, сжальтесь, очень прошу.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Март 17, 2015, 23:45
Сделал все как в гайде, но на другом компе, приложение не открывается, в диспетчере есть, а окно не появляется. Что может быть причиной?
Пока что сколько мои exe не запускали - везде запускались, то есть жалаб не было. Есть вариант поставить на виртуалку XP, расшарить папку с вашими проектами из виртуалки, чтобы собирать статические exe. Да, напряжно, но как вариант, может будут запускаться нормально. Либо отказаться от статики

а не подскажете что у вас с serialport получилось? на второй странице есть отсылка что вы в гугле посмотрели, а каков результат не отписались (ну или я зевнул). уже третий день пошёл как пытаюсь разобраться, сжальтесь, очень прошу.
По-моему, serialport невозможно собрать статически. Нет такого ключа для конфигурации, как и для модуля multimedia. Тут только один вариант - использовать динамику


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: billy4685 от Декабрь 14, 2015, 11:10
Здравствуйте, 8Observer8. Я попробовал собрать по вашей инструкции статически Qt 5.3.2. Теперь простые приложения собираются нормально в один exe. А вот те приложения в которых я использую свои собственные виджеты, увы не собираются. Пишут :-1: ошибка: Unknown module(s) in QT: designer. Походу при конфигурации  configure нужно еще что-то дописать (наверное -designer пока не пробовал). И еще есть вопрос, как будут вести себя приложения в которых используется Open GL ES2? Нужно еще чо-то дописовать к configure?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: 8Observer8 от Декабрь 14, 2015, 11:26
Я уверен, что когда пишет "Unknown module", значит при конфигурировании не был указан нужный модуль. Я не использовал свои виджеты, поэтому не знаю какой какой ключ нужно писать. Придётся вам найти самому. А может кто подскажет. А потом заново конфигурировать и пересобирать Qt

По поводу второго вопроса, то скорее всего, нормально. Ведь когда пишешь ключ -opengl, то можно не беспокоиться за OpenGL.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 14, 2015, 13:50
billy4685, configure -help выводит опции сборки, GLES там тоже настраивается. В pro файле имеется переменная QT, модули записываются в виде
Код:
QT += core gui opengl
Так можно понять, чего именно из модулей не хватает и дособрать отдельно.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: billy4685 от Декабрь 14, 2015, 17:35
8Observer8, __Heaven__, спасибо за ответы.
Попробовал собрать следующую конфигурацию (подумал может нужно вместо -nomake tools указать -make tools) :
configure -static -platform win32-g++ -prefix "C:\Qt\Qt5.3.2_Static_2" -release -opensource -confirm-license -nomake examples -nomake tests -make tools -opengl desktop -no-angle -qt-sql-sqlite -make libs -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype
все собралось, так же как и ранее. Но результат тот же((.

Если в *.pro файл дописую Qt += designer, то сразу же выбивается ошибка: Project ERROR: Unknown module(s) in QT: designer.
Здесь смотрел ключи для конфигурации: http://doc.crossplatform.ru/qt/4.8.x/html-qt/configure-options.html , но какой именно ключ нужно вписать, пока не пойму. ((


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: __Heaven__ от Декабрь 14, 2015, 17:59
А такой модуль в qt точно существует? За что он отвечает?
В readme написано, что отдельные модули можно собрать при помощи
Код:
make -j4 module-qtscript module-qtwebkit


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: billy4685 от Декабрь 14, 2015, 23:08
А такой модуль в qt точно существует? За что он отвечает?
В readme написано, что отдельные модули можно собрать при помощи
Код:
make -j4 module-qtscript module-qtwebkit
Да в Qt существует модуль QtDesigner, он позволяет создавать собственные классы с возможностью их добавления и использования в QtDesigner-е (http://doc.crossplatform.ru/qt/4.3.5/qtdesigner.html).
Я использовал его при написании своего виджета для своих приложений.


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: Igors от Декабрь 15, 2015, 07:57
Да в Qt существует модуль QtDesigner, он позволяет создавать собственные классы с возможностью их добавления и использования в QtDesigner-е (http://doc.crossplatform.ru/qt/4.3.5/qtdesigner.html).
И не только. QFormBuilder очень мощная возможность


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: pasergey от Январь 24, 2018, 14:24
Подскажите, где можно скачать уже готовую версию для статической линковки для 5.10.0 ?


Название: Re: Статическая сборка Qt 5.4 для Win 7. Сжатие exe до мин. размера с помощью upx
Отправлено: DarkHobbit от Январь 31, 2018, 16:36
Подскажите, где можно скачать уже готовую версию для статической линковки для 5.10.0 ?
Уже готовую - это уже скомпилированную, что ли? Ну могу, например, поделиться, как раз недавно собирал. Только смысл? Статика она на то статика, что её каждый собирает под свои хотелки. Я вот например OpenSSL подключаю, зато выбрасываю веб, мультимедию, само собой примеры всякие (если очень допрёт - нужны пример соберу отдельно).

А готовый архив, который можно распаковать и компилировать, например, здесь (https://download.qt.io/official_releases/qt/5.10/5.10.0/single/qt-everywhere-src-5.10.0.zip).