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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенос из под Линуха под Винду... Проблема(Сигналы/Слоты)  (Прочитано 9767 раз)
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
Гость
« Ответ #1 : Июль 30, 2005, 00:36 »

Проблема, скорее всего, в том, что линкер не находит obj-файлы сгенеренные компилятором по файлам сгенеренным moc-ом, посмотри в настройках проэкта куда у тебя все объектники складываются.
Записан
jindos
Гость
« Ответ #2 : Август 01, 2005, 10:02 »

Проблема точно не в этом... Дело в том, что такая ошибка возникает, как я обнаружил, только в том случае, если имеются слоты или сигналы с параметром... В случае же использования слотов и сигналов без параметров - все компилится и линкуется нормально...
Записан
jindos
Гость
« Ответ #3 : Август 01, 2005, 10:08 »

З.Ы. Да еще... Объектных файлов для moc-ов - нет, т.к. у меня все moc-и в *.h - ках...
Но, если и делать *.cpp-шки, то разницы - нет: ошибка та же...
Записан
jindos
Гость
« Ответ #4 : Август 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
Гость
« Ответ #5 : Август 02, 2005, 11:40 »

может ты забыл в класс макрос Q_OBJECT вставить?
Записан
jindos
Гость
« Ответ #6 : Август 02, 2005, 12:19 »

Нет Sergeich, если бы я его забыл вставить (хотя это достаточно тяжело), то moc-файл я бы просто не получил, т.к. утилита moc-создаст его только в случае присутствия данного макроса...
К сожалению, проблема не в этом...
Записан
Роман Десятов
Гость
« Ответ #7 : Август 18, 2005, 19:51 »

Возможно, не подключена библиотека qtmain.lib  -  без нее не соберется главное приложение.
Записан
jindos
Гость
« Ответ #8 : Август 19, 2005, 11:16 »

Да нет... уже все нормально... Дело было в коде... Просто для кросплатформенности есть файлик os.h в котором задефайнены платформо-зависимые фичи... Ну и один из дефайнов был вида:
#define __fastcall
он в принципе для Линуха, но почему-то я решил его и для винды сделать...
Не знаю каким боком он таким образом влиял на ситуацию, но факт остается фактом...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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