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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt & Code::Blocks  (Прочитано 9432 раз)
bob
Гость
« : Декабрь 20, 2005, 15:35 »

Сделал в QtDesigner форму пытаюсь компилять в Code::Blocks и получаю такое сообщение:
Код:
Linking executable: D:\ProjectsQt\Training\MyTest\QTapp.exe
.objs\MyTest.o(.text+0x17a):MyTest.cpp: undefined reference to `vtable for MyTest'
.objs\MyTest.o(.text+0x186):MyTest.cpp: undefined reference to `vtable for MyTest'
.objs\MyTest.o(.text+0x26e):MyTest.cpp: undefined reference to `vtable for MyTest'
.objs\MyTest.o(.text+0x27a):MyTest.cpp: undefined reference to `vtable for MyTest'
collect2: ld returned 1 exit status
Записан
limetree
Гость
« Ответ #1 : Декабрь 22, 2005, 15:51 »

Мне тоже интересно! Сейчас рассматриваю возможности...
Взял стадартный пример...\examples\mainwindows\menus и получил пример такую же штуку:
Linking executable: C:\projects\test\test1.exe
.objs\mainwindow.o:mainwindow.cpp:(.text+0x176): undefined reference to `vtable for MainWindow'
.objs\mainwindow.o:mainwindow.cpp:(.text+0x182): undefined reference to `vtable for MainWindow'
.objs\mainwindow.o:mainwindow.cpp:(.text+0x8ca): undefined reference to `vtable for MainWindow'
.objs\mainwindow.o:mainwindow.cpp:(.text+0x8d6): undefined reference to `vtable for MainWindow'
Юзаю QT4.0 free и MinGW 3.4.4

добавлено спустя 38 минут:

 У меня есть подозрение, не работает MOC, но кок его настроить что бы работал не знаю. Может уважаемые ALL скажут, ведь кто-то уже проходил это.
Записан
limetree
Гость
« Ответ #2 : Декабрь 26, 2005, 15:53 »

Действительно, я нашел:
Цитировать
Итак. В Tools я создал себе 2 пункта для создания pro и make файлов. Разобраться там будет несложно. Далее в свойствах проекта включил галочку "This is a custom Makefile". Дабы каждый раз не лазить и ставить эту галочку опять же можно в файле CodeBlocks_Install_Dir/share/CodeBlocks/templates/qt.cbp добавить строчку Код:
<Option makefile_is_custom="1"/>
после строки Код:
<Option makefile="Makefile"/>
С moc действительно не хотело работать, но все-таки удалось это исправить. Лезем Settings->Compiler->Other и меняем Build method на "Work with Makefiles..." Вуаля.

но не понял вот чего: "В Tools я создал себе 2 пункта для создания pro и make файлов." Можно по поподробнее для чайника, pls, что нужно сделать  в этих двух пунктах

с уважением, limetree
Записан
L.Marvell
Гость
« Ответ #3 : Декабрь 26, 2005, 16:38 »

Нужно создать 2 пункта. Первый называем к примеру Project и вбиваем строку qmake -project, а второй к примеру называем Makefile и вбиваем строку qmake. Все, пользуем.
Записан
limetree
Гость
« Ответ #4 : Декабрь 27, 2005, 13:38 »

Спасибо, вроде начало чего-то шевелится, но
Цитировать
make.exe -f Makefile.Debug
make.exe[1]: Entering directory `C:/projects/test6'
g++ -c -g -g -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:/qt/4.0.0/include/QtGui" -I"C:/qt/4.0.0/include/QtCore" -I"C:/qt/4.0.0/include" -I"." -I"C:/qt/4.0.0/include/ActiveQt" -I"debug" -I"." -I"C:\qt\4.0.0\mkspecs\win32-g++" -o debug\main.o main.cpp
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows -o "debug\test6.exe" debug\main.o  -L"C:\qt\4.0.0\lib" -lmingw32 -lqtmaind -lQtCored4 -lQtGuid4

C:\CodeBlocks\bin\..\lib\gcc\mingw32\3.4.4\..\..\..\..\mingw32\bin\ld.exe: cannot find -lqtmaind

collect2: ld returned 1 exit status
make.exe[1]: Leaving directory `C:/projects/test6'
make.exe[1]: *** [debug\test6.exe] Error 1
make.exe: *** [debug] Error 2
Process terminated with status 1 (0 minutes, 5 seconds)
1 errors, 0 warnings

Хотя файл qtmaind.prl лежит в каталоге $QTDIR\lib.
Чего ему еще не хватает?
Записан
limetree
Гость
« Ответ #5 : Декабрь 28, 2005, 11:38 »

Я решил эту проблему
Цитировать
C:\CodeBlocks\bin\..\lib\gcc\mingw32\3.4.4\..\..\..\..\mingw32\bin\ld.exe: cannot find -lqtmaind

Сделал libqtmaind.a (и соотв. dll-ку)
Для этого в $QTDIR\src\winmain выполнил
make -f Makefile.debug
Аналогично для QtCored4 и QtGuid4
в каталогах corelib и qtgui
Записан
mnv
Гость
« Ответ #6 : Ноябрь 16, 2007, 15:51 »

А я вот попытался так решить - частично помогло, но не совсем

У меня QT4.3.2 + MinGW + Eclipse.
Поставил - все работает, но!!! Решил переконфигурировать QT с ключем -static.
После этого, при попытке скомпилировать проект, который ранее работал, возникает ошибка:
Код:
cannot find -lqtmaind
В папке C:\QT\4.3.2\lib есть файлы libqtmain.a, qtmain.prl, qtmaind.prl

По вашему совету выполнил команду
Цитировать
make -f Makefile.debug
по очереди в папках winmain, gui, corelib

Для winmain все прекрасно сработало. Ошибка
Код:
cannot find -lqtmaind
больше не появляется.
Но появляется теперь ошибка
Код:
cannot find -lqtgui

Глянул в lib - там создались файлы libqtmaind, libQtGuid, libQtCored.
Попробовал переименовать libQtGuid->libQtGui, libQtCored->libQtCore.
Старые ошибки пропали!! Но осталась такая ошибка
Код:
make: *** [release] Error 2
make[1]: *** [release\testgui.exe] Error 1

Как бы от нее избавиться? Может переименовывать файлы было некорректно?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #7 : Ноябрь 16, 2007, 16:48 »

Конечн переименовывать библиотеки не надо. Стоит попробовать удалить объектные файлы( mingw32-make clean ) и мэйкфайлы своего проекта, а далее выполнить для своего проекта qmake и mingw32-make.
и все получится.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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