Название: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 03, 2009, 14:11 Всем привет!
Что имеем: Core - ядро, собирается как статическая либа Basic - плагин, собираю просто как статическую либу Main - исполняемая апликуха, которая подтягивает обе вышеуказанных либы. Makefile`ы к каждому проекту генерирую с помощью CMake. Что получаем: Ядро и плагин нормальное собираются как либы. Main компилируется без ошибок, этап линковки выдает следующее: Код: 2>Compiling... Вопросы 1) Что есть такое Qt-плагин для компилятора? Обычная либа или может dll`ка? Тоесть что-то надо сообщать компилятору специфическое, чтобы как-то обозначить, что собираемый проект - плагин? 2) Ошибки линковки касаются в основном обычной статической либы core.lib, тоесть по-большей части проблема не в плагине,а впринципе в линковке Qt. Что может их вызывать, если учитывать, что и Qt и либы собирались одним и тем же студийным компилятором (VC8)? 3) Может ли мне просто напросто не хватать каких-то специфических Qt-шных либ? Я линкую: qtmain, Qt3Support, QtCore, QtGui, QtXml, QtSql, QtNetwork. Заранее всем спасибо за комментарии, ответы и советы! Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: pastor от Апрель 03, 2009, 14:18 Глянь ка сначало вот на это CMake как система сборки для Qt приложений (http://prog.org.ru/wiki/index.php?title=CMake_%D0%BA%D0%B0%D0%BA_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_Qt_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9)
Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 03, 2009, 14:29 На эту доку я наткнулся уже после того как написал свои CMakeList.txt файлы. Сравнил. У меня всё делается в точности также. Хёдеры из ui файлов генеряться нормально, moc файлы тоже.
UPD: Более того, для проверки генерил проектные файлы для студии и уже из студии проверял все настройки проекта для компиляции и линковки Qt. Инклуды до Qt прописаны, путь до либ тоже, сами либы прописаны в линковщик... Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: crackedmind от Апрель 03, 2009, 14:41 Цитировать 1) Что есть такое Qt-плагин для компилятора? Обычная либа или может dll`ка? Тоесть что-то надо сообщать компилятору специфическое, чтобы как-то обозначить, что собираемый проект - плагин? Чаще всего dll'a, если Qt скомпиленно статически, то lib'a. В qmake это указывается так: Код: CONFIG += qt plugin Цитировать 2) Ошибки линковки касаются в основном обычной статической либы core.lib, тоесть по-большей части проблема не в плагине,а впринципе в линковке Qt. Что может их вызывать, если учитывать, что и Qt и либы собирались одним и тем же студийным компилятором (VC8)? Ну 3 или 4 ошибки относится к тому что не может прилинковать moc овский объектник.Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Rcus от Апрель 03, 2009, 15:06 Вторая ошибка линковки напоминает пропущенный макрос Q_EXPORT_PLUGIN2
Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 04, 2009, 08:03 Немного продвинулся с решение проблем. moc-файлы действительно были косячные, ибо генерить я их пытался из cpp-шников. Исправил на h-шники генерацию. Moc-файлы генеряться нормальные, не пустые. В компиляцию добавляю и их и обычные cpp-шники.
Из за нервов вчера убил статический Qt, поставил обычный динамический (configure -release). Далее, собираю Core и плагин Basic как и раньше (в виде статических либ). Линковка испольняемого проекта Main выдает следующее: Код: 2>Linking... Очень радует, что ушла большая часть ошибок ) Теперь разобраться бы с этими! ) Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 04, 2009, 08:09 Вторая ошибка линковки напоминает пропущенный макрос Q_EXPORT_PLUGIN2 в плагине Basic этот макрос есть.Код: Q_EXPORT_PLUGIN2(basic, BasicProjectPlugin); Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 04, 2009, 08:36 Немного подкорректировал свои действия. Теперь, так как Qt собрана динамической, плагин Basic собрал как dll`ку. Но при этом ошибки линковки исполняемого main`а не ушли, по прежнему их 2.
Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 04, 2009, 09:00 Вести с полей:
Разобрался со второй ошибкой линковки (qInitResources_xsdeditor(void)). Оказывается в проекте либы Core затисался xsdeditor.qrc, который для самой коры не представляет интереса, поэтому она спокойно собирается без соответствующего cpp-шника. Добавил с CMakе`овский файл Коры этот ресурсный файл, либа собралась. А при линковке исполняемого Main`а ушла одна ошибка линковки. Теперь картина выглядит вот так: Код: 2>Linking... Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 04, 2009, 09:12 Вопрос!
Если в апликухе используется Q_IMPORT_PLUGIN, то это значит, что зпроисходит попытка подлкючить статический плагин? Название: Re: [CMake & Qt4] Неразрешенные ссылки при линковке (Win XP) Отправлено: Grinchman от Апрель 06, 2009, 11:35 Ну вот и собрал таки проект )
Как и предположил, плагин статический, Qt пришлось собрать статическим. Единственное что огорчило в CMake - это, то что для плагина Basic препроцессорные флаги QT_PLUGIN и QT_STATICPLUGIN не выставляются с помощью процедур модуля FindQt4, пришлось "ручками" дописывать эти флаги. |