Название: static приложение не собирается, не простейшая ситуация Отправлено: Гурман от Июль 14, 2010, 11:28 структура проекта такая:
- собирается статическая библиотека .a, которая преимущественно состоит из кода на С, но имеет некоторый код на С++, и один класс, использующий классы Qt для работы с динамическими библиотеками - собирается основное приложение, которое линкуется с предыдущей библиотекой, оно вовсю использует Qt - собирается динамическая библиотека, которая при ее наличии в каталоге приложения опознается и загружается основным приложением (при помощи того самого класса, который в статической библиотеке), либо не загружается, если отсутствует, подобных библиотек может быть много (типа плагины но в собственном формате) все это в варианте с shared Qt на ура собирается и замечательно работает теперь надо собрать статический вариант, при этом допускается включение небольших библиотек в комплект, то есть, mingwm10.dll можно положить рядом, значит можно не отключать обработку исключений статический Qt был собран следующим образом: - дистрибутив установлен в отдельный каталог параллельно с базовой shared версией в каталог c:/Qt/2009.03.static - в нем выполнены configure -static -debug-and-release -no-webkit -no-qt3support и mingw32-make sub-src (ключ -no-exceptions опущен, поскольку приложение вовсю использует исключения) - не редактировал mkspecs как рекомендуется, поскольку где-то прочел, что для самих библиотек Qt это не нужно, а при сборке приложений ключ можно добавить в проект после сборки статического Qt образовались библиотеки с похожими именами на готовые, но без индекса 4 в конце имени, и в разы больше shared, как и должно быть (только с именами не понятно, так ли должно быть): Цитировать 14.07.2010 10:30 4 311 604 libQtCore.a 22.06.2009 16:41 2 294 384 libQtCore4.a 14.07.2010 10:28 114 143 474 libQtCored.a 22.06.2009 16:41 2 624 084 libQtCored4.a проверено, что после установки и сборки статической версии Qt динамическая версия приложения по-прежнему нормально собирается и работает но при попытке собрать статическую версию, собирается только библиотека .a, а сборка приложения на этапе компоновки валится с сообщениями о неудовлетворенных ссылках в этой библиотеке, ссылки на методы классов Qt такого вида Цитировать ../dlloading.cpp:18: undefined reference to `_imp___ZN4QDirC1ERK7QStringS2_6QFlagsINS_8SortFlagEES3_INS_6FilterEE' и Цитировать c:/Qt/2009.03/qt/include/QtCore/../../src/corelib/tools/qlist.h:(.text$_ZN5QListI9QFileInfoEixEi[QList<QFileInfo>::operator[]:-1: error: undefined reference to `_imp___Z11qt_assert_xPKcS0_S0_i' как видно, ссылки в библиотеке почему-то идут на shared версию, хотя в проекте везде понаписано static, причем в Настройках запуска для QTDIR тоже указано C:/Qt/2009.03.static/qt я даже понаписал таких ключей Цитировать CONFIG += staticlib \ static QMAKE_LFLAGS += -static \ -LC:/Qt/2009.03.static/qt/lib пытался в системе заменить переменную QTDIR на C:/Qt/2009.03.static/qt - не помогает, библиотека все равно собирается со ссылками на shared версию где еще это настраивать??? что надо сделать, чтобы библиотекарь при сборке статической библиотеки компоновал ее с библиотеками в static каталоге? а может дело в чем-то другом? Название: Re: static приложение не собирается, не простейшая ситуация Отправлено: Гурман от Июль 14, 2010, 11:58 не... тут что-то другое, переименовывал библиотеки, добавляя суффикс 4 - перестает находить другие методы других классов по ссылке из основного приложения
что не так при сборке моей библиотеки? Название: Re: static приложение не собирается, не простейшая ситуация Отправлено: Гурман от Июль 14, 2010, 13:00 перенес 1 файл из проекта библиотеки в проект основного приложения - тот самый, в котором класс с неудовлетворенными ссылками - все собралось, все работает, приложение получилось статическим, нужен только mingwm10.dll из-за использования исключений
смотрю на настройки обоих проектов - они одинаковы... ??? |