Russian Qt Forum
Апрель 30, 2024, 05:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Статическая сборка Qt 5.1.1 на Windows 7  (Прочитано 18726 раз)
8Observer8
Гость
« : Декабрь 12, 2013, 15:01 »

Привет!

Хочу собрать Qt статически.

Вот мои шаги:

- cкачал и установил Qt 5.1.1 for Windows 32-bit (MinGW 4.8, OpenGL, 666 MB)

- при установки папку назвал Qt5.1.1_static

- открыл All Programs -> Qt 5.1.1_static -> 5.1.1 -> MinGW 4.8 (32-bit) -> Qt 5.1.1 for Desktop (MinGW 4.8 32 bit)

- в открывшимся терминале, ввёл команду и перешёл в папку qtbase

Цитировать
cd C:\Qt\Qt5.1.1_static\5.1.1\Src\qtbase

- для конфигурирования ввёл команду:

Цитировать
configure -static -opengl desktop -nomake examples -nomake tests

- потом ввожу эту команду для построения:

Цитировать
mingw32-make

- ввожу команду для установки:

Цитировать
mingw32-make install

Выводится много сообщений о том, что невозможно переписать файл на себя:

Цитировать
xcopy /s /q /y /i C:\Qt\Qt5.1.1_static\5.1.1\Src\qtbase\doc\global C:\Qt\Qt5.1.1_static\5.1.1\
Src\qtbase\doc\global

Запускаю QtCreator, создаю простой проект с диалогом, компилирую в режиме "Release", но exe-файл, естественно получается нестатический.
« Последнее редактирование: Декабрь 12, 2013, 15:51 от 8Observer8 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Декабрь 12, 2013, 18:54 »

в configure передай путь установки: -prefix "путь"

а как по мне лучше собирать из «чистых» исходников: http://download.qt-project.org/official_releases/qt/5.2/5.2.0/single/qt-everywhere-opensource-src-5.2.0.zip
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
8Observer8
Гость
« Ответ #2 : Декабрь 13, 2013, 19:19 »

Большое спасибо! Никаких сообщений об ошибках не было!

Цитировать
configure -static -prefix "C:/Qt/Qt5.1.1_static" -opengl desktop -nomake examples -nomake tests

В настройках QCreator добавил новый профиль с "C:/Qt/Qt5.1.1_static/bin/qmake.exe"

Но при запуске приложения из папки release система требует libgcc_s_dw2-1.dll Нельзя ли собирать приложения так, чтобы код из побочных dll копировался в один exe?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #3 : Декабрь 13, 2013, 20:32 »

там надо какие-то правки в mkspecs делать насколько я помню, погугли или поищи на форуме
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
8Observer8
Гость
« Ответ #4 : Декабрь 13, 2013, 20:37 »

Хорошо, спасибо! Как что-нибудь найду, напишу здесь.
« Последнее редактирование: Декабрь 13, 2013, 20:42 от 8Observer8 » Записан
8Observer8
Гость
« Ответ #5 : Декабрь 13, 2013, 21:44 »

Простое приложение с диалогом просит:

libgcc_s_dw2-1.dll
libwinpthread-1.dll
libstdc++-6.dll

Я их добавил в папку с exe - запускается. Это приложение будет запускаться на всех машинах (позже XP)? Или не факт?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Декабрь 13, 2013, 23:35 »

Но при запуске приложения из папки release система требует libgcc_s_dw2-1.dll Нельзя ли собирать приложения так, чтобы код из побочных dll копировался в один exe?

Перед сборкой Qt нужно зайти в mkspecs/win32-g++/qmake.conf и в переменную QMAKE_LFLAGS вписать "-static -static-libgcc", так что это будет выглядеть так

Цитировать
QMAKE_LFLAGS = -static -static-libgcc

Потом собрать Qt с уже сказанными ключами
Записан
8Observer8
Гость
« Ответ #7 : Декабрь 14, 2013, 14:04 »

Огромное спасибо! Ты съэкономил мне кучу времени!

Всё собирается. Только вот qmake.exe пришлось подцеплять из Src, то есть отсюда: C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\bin

Потому что не проходит команда установки: mingw32-make install

Вот такое выдаёт:

Цитировать
C:\Qt\Qt5.2.0\5.2.0\Src\qtbase>mingw32-make install
cd src\ && ( if not exist Makefile C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\bin\qmake C:\Q
t\Qt5.2.0\5.2.0\Src\qtbase\src\src.pro -o Makefile ) && mingw32-make -f Makefile
 install
mingw32-make[1]: Entering directory 'C:/Qt/Qt5.2.0/5.2.0/Src/qtbase/src'
cd tools\bootstrap\ && ( if not exist Makefile C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\bi
n\qmake C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\src\tools\bootstrap\bootstrap.pro -o Make
file ) && mingw32-make -f Makefile install
mingw32-make[2]: Entering directory 'C:/Qt/Qt5.2.0/5.2.0/Src/qtbase/src/tools/bo
otstrap'
mingw32-make -f Makefile.Release install
mingw32-make[3]: Entering directory 'C:/Qt/Qt5.2.0/5.2.0/Src/qtbase/src/tools/bo
otstrap'
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Makefile.Release:10404: recipe for target 'install_target' failed
mingw32-make[3]: *** [install_target] Error 1
mingw32-make[3]: Leaving directory 'C:/Qt/Qt5.2.0/5.2.0/Src/qtbase/src/tools/boo
tstrap'
Makefile:44: recipe for target 'release-install' failed
mingw32-make[2]: *** [release-install] Error 2
mingw32-make[2]: Leaving directory 'C:/Qt/Qt5.2.0/5.2.0/Src/qtbase/src/tools/boo
tstrap'
Makefile:68: recipe for target 'sub-bootstrap-install_subtargets' failed
mingw32-make[1]: *** [sub-bootstrap-install_subtargets] Error 2
mingw32-make[1]: Leaving directory 'C:/Qt/Qt5.2.0/5.2.0/Src/qtbase/src'
makefile:53: recipe for target 'sub-src-install_subtargets' failed
mingw32-make: *** [sub-src-install_subtargets] Error 2

Я ожидал, что если выбрать режим "Release", то exe-файл будет находиться здесь: build-HelloQt-Desktop_Qt_5_2_0_Static_MinGW_32bit-Выпуск\release

А он находится здесь: build-HelloQt-Desktop_Qt_5_2_0_Static_MinGW_32bit-Выпуск\debug

И простой диалог весит 228 МБайт.

Это нормально?
« Последнее редактирование: Декабрь 14, 2013, 15:31 от 8Observer8 » Записан
Bepec
Гость
« Ответ #8 : Декабрь 14, 2013, 14:17 »

Ага. Потому что у тебя видимо собрались все библиотеки десктопные в статику Улыбающийся
Хочешь меньше - надо выбирать от чего отказаться Улыбающийся
Записан
8Observer8
Гость
« Ответ #9 : Декабрь 14, 2013, 15:25 »

Спасибо за ответ. Видимо, так. Меня смущает, что exe-файл создаётся в папке Debug, а не Release (хотя я выбираю релиз). Вот в этой папке: build-HelloQt-Desktop_Qt_5_2_0_Static_MinGW_32bit-Выпуск\debug

Я если честно, немного запутался. Получается, что у нас есть две папки:

build-HelloQt-Desktop_Qt_5_2_0_Static_MinGW_32bit-Отладка
build-HelloQt-Desktop_Qt_5_2_0_Static_MinGW_32bit-Выпуск

И в этих папках ещё release и debug. Странные комбинации получаются: Отладка-release, Отладка-debug, Выпуск-release, Выпуск-debug

А в QtCreator я могу выбрать только Отладка или Выпуск. Когда я выбираю Выпуск, то у меня получается Выпуск-debug. Я думаю, что если бы это был Выпуск-release, то exe весил бы намного меньше.
« Последнее редактирование: Декабрь 14, 2013, 15:26 от 8Observer8 » Записан
Bepec
Гость
« Ответ #10 : Декабрь 14, 2013, 15:56 »

Возможно. Я не знаток креатора, пусть другие подскажут Улыбающийся
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #11 : Декабрь 14, 2013, 20:45 »

Это все баги в QtCreator-е
Бывает что при выборе этапа сборки криэйтор не выставляет флаг "CONFIG+=release"


Нужно выбрать в полях 1 Release
И если в 2 нет записи   "CONFIG+=release"
добавить онную в 3  (для стопроцентного результата можно еще добавить туда CONFIG-=debug)
Записан

8Observer8
Гость
« Ответ #12 : Декабрь 15, 2013, 10:17 »

lesav, спасибо тебе огромное! Теперь мой exe-файл HelloQt.exe весит всего 13 МБайт  Веселый

Запускается прямо из папки! Нужно теперь протестить будет ли запускаться на других машинах, где нет MinGW, Qt и т.д.

У меня два компьютера. Ноутбук Asus X53S с Win 7 и стационарка 2007 года с XP. На старой машине Qt собирается, только вот установка не проходит. Я так понял, что при установке нужные файлы копируются в указанную при конфигурировании папку, в моём случае в "C:/Qt/Qt5.2.0_static". Я описал выше, какие были ошибки. Но на это можно не отвечать, так как я qmake.exe подцепил вот отсюда: C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\bin\qmake.exe Теперь я могу собирать exe-файлы на стационарке и будем надеяться, что они будут без проблем запускаться на машинах пользователей. Работаю я на ноутбуке....

А вот на ноутбуке не получается сконфиругировать. Вот мои шаги:

- открываю файл C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\mkspecs\win32-g++\qmake.conf и вношу изменение:

Цитировать
QMAKE_LFLAGS = -static -static-libgcc

- открываю терминал All Programs -> Qt 5.2.0 -> 5.2.0 -> MinGW 4.8 (32-bit) -> Qt 5.2.0 for Desktop (MinGW 4.8 32 bit)

- ввожу команды:

Цитировать
cd c:\Qt\Qt5.2.0\5.2.0\Src\qtbase
Цитировать
configure -static -prefix “C:/Qt/Qt5.2.0_static” -opengl desktop -nomake examples -nomake tests

Вот какой результат:

Цитировать
c:\Qt\Qt5.2.0\5.2.0\Src\qtbase>configure -static -prefix "C:/Qt/Qt5.2.0_static"
-opengl desktop -nomake examples -nomake tests
Which edition of Qt do you want to use ?
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.
o

This is the Qt for Windows Open Source Edition.

You are licensed to use this software under the terms of
the GNU Lesser General Public License (LGPL) version 2.1.

Type 'L' to view the Lesser GNU General Public License version 2.1 (LGPLv2.1).
Type 'y' to accept this license offer.
Type 'n' to decline this license offer.

Do you accept the terms of the license?
y
Creating qmake...
g++ -o "C:\Qt\Qt5.2.0\5.2.0\Src\qtbase/bin/qmake.exe" project.o option.o propert
y.o main.o ioutils.o proitems.o qmakevfs.o qmakeglobals.o qmakeparser.o qmakeeva
luator.o qmakebuiltins.o makefile.o unixmake2.o unixmake.o mingw_make.o winmakef
ile.o projectgenerator.o meta.o makefiledeps.o metamakefile.o xmloutput.o pbuild
er_pbx.o msvc_vcproj.o msvc_vcxproj.o msvc_nmake.o msvc_objectmodel.o msbuild_ob
jectmodel.o gbuild.o cesdkhandler.o qtextcodec.o qutfcodec.o qstring.o qstringbu
ilder.o qtextstream.o qiodevice.o qmalloc.o qglobal.o qarraydata.o qbytearray.o
qbytearraymatcher.o qdatastream.o qbuffer.o qlist.o qfiledevice.o qfile.o qfiles
ystementry.o qfilesystemengine.o qfsfileengine.o qfsfileengine_iterator.o qregex
p.o qvector.o qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o qfileinfo.o qdat
etime.o qstringlist.o qabstractfileengine.o qtemporaryfile.o qmap.o qmetatype.o
qsettings.o qsystemerror.o qlibraryinfo.o qvariant.o qvsnprintf.o qlocale.o qloc
ale_tools.o qlinkedlist.o qnumeric.o qcryptographichash.o qxmlstream.o qxmlutils
.o qlogging.o qjson.o qjsondocument.o qjsonparser.o qjsonarray.o qjsonobject.o q
jsonvalue.o qfilesystemengine_win.o qfilesystemiterator_win.o qfsfileengine_win.
o qlocale_win.o qsettings_win.o qsystemlibrary.o registry.o -static -s -lole32 -
luuid -ladvapi32 -lkernel32
Makefile:157: recipe for target 'C:\Qt\Qt5.2.0\5.2.0\Src\qtbase/bin/qmake.exe' f
ailed
mingw32-make: *** [C:\Qt\Qt5.2.0\5.2.0\Src\qtbase/bin/qmake.exe] Error 1
rm -f project.o option.o property.o main.o ioutils.o proitems.o qmakevfs.o qmake
globals.o qmakeparser.o qmakeevaluator.o qmakebuiltins.o makefile.o unixmake2.o
unixmake.o mingw_make.o winmakefile.o projectgenerator.o meta.o makefiledeps.o m
etamakefile.o xmloutput.o pbuilder_pbx.o msvc_vcproj.o msvc_vcxproj.o msvc_nmake
.o msvc_objectmodel.o msbuild_objectmodel.o gbuild.o cesdkhandler.o qtextcodec.o
 qutfcodec.o qstring.o qstringbuilder.o qtextstream.o qiodevice.o qmalloc.o qglo
bal.o qarraydata.o qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlis
t.o qfiledevice.o qfile.o qfilesystementry.o qfilesystemengine.o qfsfileengine.o
 qfsfileengine_iterator.o qregexp.o qvector.o qbitarray.o qdir.o qdiriterator.o
quuid.o qhash.o qfileinfo.o qdatetime.o qstringlist.o qabstractfileengine.o qtem
poraryfile.o qmap.o qmetatype.o qsettings.o qsystemerror.o qlibraryinfo.o qvaria
nt.o qvsnprintf.o qlocale.o qlocale_tools.o qlinkedlist.o qnumeric.o qcryptograp
hichash.o qxmlstream.o qxmlutils.o qlogging.o qjson.o qjsondocument.o qjsonparse
r.o qjsonarray.o qjsonobject.o qjsonvalue.o qfilesystemengine_win.o qfilesystemi
terator_win.o qfsfileengine_win.o qlocale_win.o qsettings_win.o qsystemlibrary.o
 registry.o
process_begin: CreateProcess(NULL, rm -f project.o option.o property.o main.o io
utils.o proitems.o qmakevfs.o qmakeglobals.o qmakeparser.o qmakeevaluator.o qmak
ebuiltins.o makefile.o unixmake2.o unixmake.o mingw_make.o winmakefile.o project
generator.o meta.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o msvc
_vcproj.o msvc_vcxproj.o msvc_nmake.o msvc_objectmodel.o msbuild_objectmodel.o g
build.o cesdkhandler.o qtextcodec.o qutfcodec.o qstring.o qstringbuilder.o qtext
stream.o qiodevice.o qmalloc.o qglobal.o qarraydata.o qbytearray.o qbytearraymat
cher.o qdatastream.o qbuffer.o qlist.o qfiledevice.o qfile.o qfilesystementry.o
qfilesystemengine.o qfsfileengine.o qfsfileengine_iterator.o qregexp.o qvector.o
 qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o qfileinfo.o qdatetime.o qstri
nglist.o qabstractfileengine.o qtemporaryfile.o qmap.o qmetatype.o qsettings.o q
systemerror.o qlibraryinfo.o qvariant.o qvsnprintf.o qlocale.o qlocale_tools.o q
linkedlist.o qnumeric.o qcryptographichash.o qxmlstream.o qxmlutils.o qlogging.o
 qjson.o qjsondocument.o qjsonparser.o qjsonarray.o qjsonobject.o qjsonvalue.o q
filesystemengine_win.o qfilesystemiterator_win.o qfsfileengine_win.o qlocale_win
.o qsettings_win.o qsystemlibrary.o registry.o, ...) failed.
make (e=2): The system cannot find the file specified.
Makefile:163: recipe for target 'clean' failed
mingw32-make: *** [clean] Error 2
Cleaning qmake failed, return code 2
Записан
Serr500
Гость
« Ответ #13 : Декабрь 15, 2013, 10:30 »

Удалите всё содержимое папки исходников и скопируйте исходники заново. Ошибка связана с тем, что остались файлы от предыдущего конфигурования.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #14 : Декабрь 15, 2013, 12:20 »

еще в командной строке лучше все пути указывать через обратный слэш, винда такая винда
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 23.