Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: jindos от Июль 29, 2005, 17:44 Есть такая проблем:
Имеется прилага, писавшаяся под Линухом, и там в ней все компилилось и линковалось нормально... (Использовалась Qt 3.3.2) Начал переносить ее под Винду: откомпилил Qt 3.3.4 при помощи win32-msvc так, как написано здесь: http://kde-cygwin.sourceforge.net/qt3-win32/compile-msvc.php Проект собрал заново под VC2003 .NET. Все вроде откомпилилось, но на линковке ругается на фигню, которая в принципе находится в moc-файлах (некоторые из них переделывал под Виндой). Сообщение типа: topendialog.obj : error LNK2019: unresolved external symbol "class QApplication * qApp" (?qApp@@3PAVQApplication@@A) referenced in function "public: static class QString __cdecl TOpenDialog::tr(char const *,char const *)" (?tr@TOpenDialog@@SA?AVQString@@PBD0@Z) topendialog.obj : error LNK2001: unresolved external symbol "struct QUType_ptr static_QUType_ptr" (?static_QUType_ptr@@3UQUType_ptr@@A) Начал убирать в тестовых целях из *.h-ек сигналы и слоты, Q_OBJECT и подключение moc-файлов в *.cpp-ах... На каком-то этапе все слинковалось... Кто-нить сталкивался с такой проблемой? Может уилита moc криво работает? Или опции компилятора какие-нить выставить надо? Спасибо... Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: SLiDER от Июль 30, 2005, 00:36 Проблема, скорее всего, в том, что линкер не находит obj-файлы сгенеренные компилятором по файлам сгенеренным moc-ом, посмотри в настройках проэкта куда у тебя все объектники складываются.
Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: jindos от Август 01, 2005, 10:02 Проблема точно не в этом... Дело в том, что такая ошибка возникает, как я обнаружил, только в том случае, если имеются слоты или сигналы с параметром... В случае же использования слотов и сигналов без параметров - все компилится и линкуется нормально...
Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: jindos от Август 01, 2005, 10:08 З.Ы. Да еще... Объектных файлов для moc-ов - нет, т.к. у меня все moc-и в *.h - ках...
Но, если и делать *.cpp-шки, то разницы - нет: ошибка та же... Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: jindos от Август 02, 2005, 09:44 Продолжает ругаться вот на эту штуку "struct QUType_ptr static_QUType_ptr" при линковке... Опять же эта структура (struct QUType) появляется в moc-файле, только в случае использования слота с параметром; она там как раз за параметр и отвечает...
Вот как он там определяется... static const QUParameter param_slot_0[] = { { "b", &static_QUType_ptr, "short", QUParameter::In } - слот может принять short b... При использовании слотов без параметров эта строка и последующие упоминания QUType отсутствуют и все компилится и линкуется замечательно... И чего не хватает линкеру, чтобы она не была unresolved external symbol? :( :? Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: Sergeich от Август 02, 2005, 11:40 может ты забыл в класс макрос Q_OBJECT вставить?
Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: jindos от Август 02, 2005, 12:19 Нет Sergeich, если бы я его забыл вставить (хотя это достаточно тяжело), то moc-файл я бы просто не получил, т.к. утилита moc-создаст его только в случае присутствия данного макроса...
К сожалению, проблема не в этом... Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: Роман Десятов от Август 18, 2005, 19:51 Возможно, не подключена библиотека qtmain.lib - без нее не соберется главное приложение.
Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты) Отправлено: jindos от Август 19, 2005, 11:16 Да нет... уже все нормально... Дело было в коде... Просто для кросплатформенности есть файлик os.h в котором задефайнены платформо-зависимые фичи... Ну и один из дефайнов был вида:
#define __fastcall он в принципе для Линуха, но почему-то я решил его и для винды сделать... Не знаю каким боком он таким образом влиял на ситуацию, но факт остается фактом... |