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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: static приложение не собирается, не простейшая ситуация  (Прочитано 2547 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Июль 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 каталоге? а может дело в чем-то другом?

« Последнее редактирование: Июль 14, 2010, 11:46 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #1 : Июль 14, 2010, 11:58 »

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

что не так при сборке моей библиотеки?
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Июль 14, 2010, 13:00 »

перенес 1 файл из проекта библиотеки в проект основного приложения - тот самый, в котором класс с неудовлетворенными ссылками - все собралось, все работает, приложение получилось статическим, нужен только mingwm10.dll из-за использования исключений

смотрю на настройки обоих проектов - они одинаковы...  Непонимающий
« Последнее редактирование: Июль 14, 2010, 14:34 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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