Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: Гурман от Май 28, 2010, 15:12



Название: как же побороть статическую сборку?...
Отправлено: Гурман от Май 28, 2010, 15:12
проект близится к состоянию альфа, собственно, уже практически подошел к ней, надо передавать на тестирование, но до сих пор тянется непонятный косяк со статической сборкой в Win, при помощи QtCreator

с самого начала вроде все было сделано, как сказано в документации, получены статические библиотеки, и даже они по-началу использовались в VisualStudio для статической сборки, которая нормально работала (собирал библиотеки не я, поэтому не знаю точно, что там делали)

потом проект продолжился с QtCreator, в момент начала был 1.2.1, и так он пока и остался, не было желания коней на переправе менять... но с Креатором какой-то непонятный косяк - все вроде настроено на статическую сборку, есть флаг QMAKE_LFLAGS += -static, используется еще дополнительная библиотека с ключом CONFIG += staticlib, Qt библиотеки вроде тоже статические

результат странный - приложение собирается явно статически, его размер более 9 МБайт, но при запуске оно все равно требует наличия библиотек QtGui и mingw  ???

если собирать динамически, то размер приложения получается несколько сотен килобайт, и также точно достаточно ему положить эти 2 библиотеки, чтобы оно заработало

это при сборке с отладчиком... если же собирать release, то получается тоже несколько сотен килобайт, но тут явно динамически, и разумеется тоже требует

где собака порылась?? просьба помочь разобраться по полочкам, где что надо настроить, и что сделать, чтобы от этих библиотек избавиться (+150 Мбайт тащатся)


Название: Re: как же побороть статическую сборку?...
Отправлено: Amigo_sa от Май 28, 2010, 17:54
Есть удобная программка для винды - DependencyWalker (http://ru.wikipedia.org/wiki/Dependency_Walker). Она сразу покажет какая из подключенных библиотек зависит от указанных длл. Скорее всего не все компоненты собраны статически...


Название: Re: как же побороть статическую сборку?...
Отправлено: Гурман от Май 31, 2010, 08:12
да вот проблема в том, что собирал другой человек, и он уже не помнит что именно делал... причем у него долго не получалось вообще проект собрать, компоновка не выполнялась, он не шибко опытный, похоже нашаманил что-то с библиотеками  >:(

теперь надо постараться это исправить, и пока не ясно как лучше, может имеет смысл заодно перескочить на последнюю версию Qt, но боязно, как бы в проекте что-нибудь не посыпалось, больше 25000 строк уже работает, и еще дофига делать


Название: Re: как же побороть статическую сборку?...
Отправлено: Amigo_sa от Май 31, 2010, 11:20
да вот проблема в том, что собирал другой человек, и он уже не помнит что именно делал... причем у него долго не получалось вообще проект собрать, компоновка не выполнялась, он не шибко опытный, похоже нашаманил что-то с библиотеками  >:(
Так можно посмотреть, какие библиотеки собраны с зависимостями


Название: Re: как же побороть статическую сборку?...
Отправлено: Гурман от Май 31, 2010, 17:30
да и так понятно же, ну показывает эта программа зависимости от тех библиотек, которые тянутся за приложением, от Qt их всего 3 - QtCored4, QtGUId4 и mingwm10, больше никаких зависимостей нет - ничего нового с ее помощью узнать не удается

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


Название: Re: как же побороть статическую сборку?...
Отправлено: b-s-a от Май 31, 2010, 23:14
нефига не статически. просто в бинарниках содержится отладочная информация. Сделай strip --strip-unneeded myprog.exe и увидишь какой реальный объем.

Но вообще-то, отладочный вариант нужен именно для отладки и не предполагает распространения. Кстати, релизный вариант компонуется с QtCore4.dll, а не QtCored4.dll.

Проверь, что за профиль Qt у тебя выбран. Скорее всего, у тебя для проекта выбран профиль динамической Qt!!!


Название: Re: как же побороть статическую сборку?...
Отправлено: Гурман от Июнь 01, 2010, 08:16
какие должны быть в наличии библиотеки для статической сборки? файлы lib*.a в каталоге \Qt\20??.??\qt\lib ? они присутствуют

Проверь, что за профиль Qt у тебя выбран. Скорее всего, у тебя для проекта выбран профиль динамической Qt!!!

где это выбирается? в Проекты, ни в одной закладке профиль динамический/статический не выбирается
может для Release ключ -static нужен?


Название: Re: как же побороть статическую сборку?...
Отправлено: b-s-a от Июнь 01, 2010, 16:57
заходишь в инструменты - параметры - qt4. Там добавляешь свой статический профиль Qt. Затем в настройках проекта выбираешь этот профиль.