Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: allco от Июль 21, 2006, 20:18



Название: статическая компиляция QT ???
Отправлено: allco от Июль 21, 2006, 20:18
как это сделать ???
как закомпилить qt статически под Windows ???

Помогите плиз !!!


Название: статическая компиляция QT ???
Отправлено: Alexei от Июль 22, 2006, 11:17
Надо в командной строке configure.exe указать -static
Например, я использую следущую команду для сборки статической Qt:

configure.exe -debug-and-release -static -plugin-sql-mysql -plugin-sql-oci -qt-zlib -no-gif -qt-libpng -no-libmng -qt-libjpeg -no-qt3support


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 22, 2006, 11:41
Цитата: "Alexei"
Надо в командной строке configure.exe указать -static
Например, я использую следущую команду для сборки статической Qt:

configure.exe -debug-and-release -static -plugin-sql-mysql -plugin-sql-oci -qt-zlib -no-gif -qt-libpng -no-libmng -qt-libjpeg -no-qt3support

-plugin-sql-mysql? В статической версии плагины же вроде как не работают? Сам не проверял, но вроде слышал такое.


Название: статическая компиляция QT ???
Отправлено: noosooth от Июль 22, 2006, 12:49
Цитата: "L.Marvell"
[-plugin-sql-mysql? В статической версии плагины же вроде как не работают? Сам не проверял, но вроде слышал такое.


Это есть не совсем так. :)
Насколько я понимаю, начиная с версии 4.1, в Qt появились т.н. статические плагины.
Посмотрите в Assistant макрос Q_IMPORT_PLUGIN и там же ссылочка на
Static Plugins.

С SQL драйверами я таким образом не работал, но по крайней мере графические плагины (GIF, JPEG и MNG) - прекрасно собираются в отдельные статические библиотеки.


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 22, 2006, 13:20
Цитата: "noosooth"
Цитата: "L.Marvell"
[-plugin-sql-mysql? В статической версии плагины же вроде как не работают? Сам не проверял, но вроде слышал такое.


Это есть не совсем так. :)
Насколько я понимаю, начиная с версии 4.1, в Qt появились т.н. статические плагины.
Посмотрите в Assistant макрос Q_IMPORT_PLUGIN и там же ссылочка на
Static Plugins.

С SQL драйверами я таким образом не работал, но по крайней мере графические плагины (GIF, JPEG и MNG) - прекрасно собираются в отдельные статические библиотеки.

Интересно. Почитаем.
Сколько места отъедает статически собранная кт? А то вот поставил собираться, а теперь думаю хватит, не хватит... :)


Название: статическая компиляция QT ???
Отправлено: noosooth от Июль 22, 2006, 14:06
Цитата: "L.Marvell"
Сколько места отъедает статически собранная кт? А то вот поставил собираться, а теперь думаю хватит, не хватит... :)


Тут мне сложно ответить, т.к. работаю в основном с динамической версией,
а статическую собираю в отдельном каталоге и только release.
(configure -release -static -qt-gif -qt-libpng -qt-libmng -qt-libjpeg)
Собираю компилятором от VS2005, причем только исходники (без еxamples, demos и tools).

Вдобавок в mkspecs\win32-msvc2005\qmake.conf я
включил оптимизацию по скорости и статически подлинковался с плюсовым runtime.

Весит это дело у меня в районе 289 метров.


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 22, 2006, 14:32
Цитата: "noosooth"
Цитата: "L.Marvell"
Сколько места отъедает статически собранная кт? А то вот поставил собираться, а теперь думаю хватит, не хватит... :)


Тут мне сложно ответить, т.к. работаю в основном с динамической версией,
а статическую собираю в отдельном каталоге и только release.
(configure -release -static -qt-gif -qt-libpng -qt-libmng -qt-libjpeg)
Собираю компилятором от VS2005, причем только исходники (без еxamples, demos и tools).

Вдобавок в mkspecs\win32-msvc2005\qmake.conf я
включил оптимизацию по скорости и статически подлинковался с плюсовым runtime.

Весит это дело у меня в районе 289 метров.

Вот заодно и спрошу. Как собирать без examples, demos, tools? Я так подозреваю что нужно где-то что-то закоментировать, только вот где?


Название: статическая компиляция QT ???
Отправлено: noosooth от Июль 22, 2006, 18:34
Цитата: "L.Marvell"
Вот заодно и спрошу. Как собирать без examples, demos, tools? Я так подозреваю что нужно где-то что-то закоментировать, только вот где?


Я после configure просто говорю: nmake sub-src


Название: статическая компиляция QT ???
Отправлено: Alexei от Июль 23, 2006, 13:53
Цитировать
Сколько места отъедает статически собранная кт? А то вот поставил собираться, а теперь думаю хватит, не хватит...


Чуть меньше 5Г


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 24, 2006, 13:52
Я уже нарыл, но все равно спасибо. Правда у меня как-то ну очень мало получилось, 263М. Счаз буду проверять все ли работает :)

добавлено спустя 57 минут:

 А это нормально что статически собранное приложение тянет за собой списочек:
comerr32.dll
krb5_32.dll
libiconv-2.dll
libintl-2.dll
libmysql.dll
libpq.dll

Само приложение работает с б/д MySQL, а либу для постгреса я скомпилил для кт на всякий случай.


Название: статическая компиляция QT ???
Отправлено: Admin от Июль 24, 2006, 15:00
дв нормально! пусть тянет!


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 24, 2006, 15:49
Стоп. Но ведь кт собиралась статически с опциями -qt-sql-mysql и -qt-sql-psql (и соотв. путями к инклудам и либам). Т.е. как мне представлялось кт должна была слинковаться с libmysql и libpq ну и соотв. приложение не должно требовать этих дллек. Или я все неправильно понял.
+ ко всему, зачем мне таскать с приложением libpq.dll и его табор, если приложение не работает с PostgreSQL?


Название: статическая компиляция QT ???
Отправлено: noosooth от Июль 24, 2006, 19:26
Цитата: "L.Marvell"
Т.е. как мне представлялось кт должна была слинковаться с libmysql и libpq ну и соотв. приложение не должно требовать этих дллек. Или я все неправильно понял.


Ничего не смыслю в этих драйверах к базам, но рискну предположить, что статически собрав Qt с ключами qt-sql... , Вы всего лишь получили отдельные статические библиотеки где нибудь в /Qt/4.x.x/plugins/...
И насколько я понимаю, линковку с этими библиотеками должно осуществлять Ваше приложение, а не Qt.
Плюс в приложении Вы должны использовать макрос Q_IMPORT_PLUGIN.

Возможно я ошибаюсь.


Название: статическая компиляция QT ???
Отправлено: Admin от Июль 24, 2006, 22:15
нет libmysql.dll  это dll, это не статическая либа
ты ее никак не запихнешь к себе, возможно для этого надо пересобрать mysql


Название: статическая компиляция QT ???
Отправлено: noosooth от Июль 25, 2006, 00:29
Цитата: "Admin"
нет libmysql.dll  это dll, это не статическая либа
ты ее никак не запихнешь к себе, возможно для этого надо пересобрать mysql


Прошу прощения, это я видимо несколько обнаглел и полез в область где ни ухо ни рыло :)

Ежели libmysql.lib это библиотека импорта для libmysql.dll  из поставки мускула, и она нужна  Qt' вому плагину для того чтобы собственно собраться, то тогда он ессно будет тянуть эту dll за собой независимо от того статически он слинкован или нет.


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 25, 2006, 12:57
Цитата: "noosooth"
Цитата: "L.Marvell"
Т.е. как мне представлялось кт должна была слинковаться с libmysql и libpq ну и соотв. приложение не должно требовать этих дллек. Или я все неправильно понял.


Ничего не смыслю в этих драйверах к базам, но рискну предположить, что статически собрав Qt с ключами qt-sql... , Вы всего лишь получили отдельные статические библиотеки где нибудь в /Qt/4.x.x/plugins/...
И насколько я понимаю, линковку с этими библиотеками должно осуществлять Ваше приложение, а не Qt.
Плюс в приложении Вы должны использовать макрос Q_IMPORT_PLUGIN.

Возможно я ошибаюсь.

Макрос не использовал, приложение собранное с помощью стат. кт работало на ура, если положить рядом с бинарником libmysql.dll ну или прописать в системе пути к этой либе.

Меня несколько просветили на qtcentre: "with -plugin-sql-mysql you will have to deliver the plugin and libmysql.dll, and with -qt-sql-mysql only libmysql.dll (because the plugin will be "hidden" inside Qt)."

добавлено спустя 7 минут:

 Осталось понять зачем приложение просит еще и libpq.dll хотя эта либа в нем и не используется. Хотя понять я вроде понял. Сборка приложения идет еще и с теми ключами, с которыми собиралась кт. Проскакивают строчки -lmysql -lpq -L C:\mysql\lib\opt -L C:\pgsql\lib. Я так понимаю они берутся из qmake.conf или нет? Вопрос только как от этого избавиться?
Неужели придется пересобрать кт без -qt-sql-psql?
t-sql-psql?

добавлено спустя 16 минут:

 Мдя... видимо таки придется пересобирать кт без -qt-sql-psql :(


Название: статическая компиляция QT ???
Отправлено: noosooth от Июль 25, 2006, 13:29
Цитата: "L.Marvell"

Макрос не использовал, приложение собранное с помощью стат. кт работало на ура, если положить рядом с бинарником libmysql.dll ну или прописать в системе пути к этой либе.

Меня несколько просветили на qtcentre: "with -plugin-sql-mysql you will have to deliver the plugin and libmysql.dll, and with -qt-sql-mysql only libmysql.dll (because the plugin will be "hidden" inside Qt)."

 Осталось понять зачем приложение просит еще и libpq.dll хотя эта либа в нем и не используется. Хотя понять я вроде понял. Сборка приложения идет еще и с теми ключами, с которыми собиралась кт. Проскакивают строчки -lmysql -lpq -L C:\mysql\lib\opt -L C:\pgsql\lib. Я так понимаю они берутся из qmake.conf или нет? Вопрос только как от этого избавиться?

Неужели придется пересобрать кт без -qt-sql-psql?


Я тут опять нагло влезу, думаю меня поправят те кто уже с этим разобрался.

Получается, что собрав Qt статически с ключами -qt-sql-psql и -qt-sql-mysql и исходя из того что товарищи с qtcentre правы  насчет  "the plugin will be "hidden" inside Qt" оба эти драйвера будут статически подлинкованы в билиотеку Qt'а, но потянут за собой  libpq.dll и  libmysql.dll. И видимо избавиться от libpq.dll в данном случае действительно можно только пересобрав Qt без ключа -qt-sql-psql.

Очень интересно ещё вот что:
А что будет, если собрать Qt статически но только с ключами -plugin-sql-psql и -plugin-sql-mysql?
Получатся ли в этом случае оба этих драйвера в виде отдельных статических библиотек, которые можно использовать как static plugins?

Ведь если получатся, то слинковав приложение только с нужным статическим плагином Вы потянете только необходимую ему dll-ку?

Или я опять наврал?


Название: статическая компиляция QT ???
Отправлено: L.Marvell от Июль 25, 2006, 13:49
Сам еще не проверял, но говорят, что именно так оно и есть.