Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: jindos от Июль 29, 2005, 17:44



Название: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты)
Отправлено: 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
он в принципе для Линуха, но почему-то я решил его и для винды сделать...
Не знаю каким боком он таким образом влиял на ситуацию, но факт остается фактом...