![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Что-то затрудняюсь прикрутить QT к Code::Blocks. Всё самых последних версий.
QT установлена и сконфигурирована по прилагаемой инструкции. Ругнулась на компилятор MinGW, дескать граната не той системы "поддерживается 3....", а у меня 5.1.3. Я проигнорировал предупреждение, подумал, что и этот сойдет. Просто пути к нему прописал. MinGW установлен по интернету один из последних (5.1.3) Пути добавлены в Path, перезагружался. По умолчанию в Code::Blocks используется GCC(G++ в списке нет). В опциях еще где-то упоминается что используется g++. Code::Blocks ночной билд уже имеет плагин QT, пути, где нашел незаполненные поля, прописал вручную. Вроде бы Code::Blocks(с плагином) должен сам вызывать qmake и генерить правильный Makefile. Во всяком случае, я не нашел, где и как ему нужно это задать вручную. Однако, я сравниваю его Makefile c результатом работы QDevelop и они очень сильно не похожи. Создаю пустой QT4 проект в папках примеров qt\examples\...\..., добавляю туда C++ и h фалы. Больше ничего не делаю. При сборке получаю ошибку типа такой "hellogl - Release" uses an invalid compiler. Skipping... Nothing to be done. Nothing to be done. Как указать правильный компилятор не понимаю, и так всё уже указано. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Не факт. Чего это вдруг, такая жесткая привязка к древней, как [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] мамонта версии?
Если QT так зависит от версии компилятора, то как ОНО вообще может собираться с НУЖНЫМ МНЕ компилятором на НУЖНОЙ МНЕ платформе? Времена меняются компиляторы обновляются, совместимость должна сохраняться. Во всяком случае, регулярная установка последних стабильных версий любого ПО как для никсов так и для винды это как правило хорошего тона. И еще непонятки. Как в Code::Blocks использовать файлы QT-проектов *.pro? При конфигурировании QT эти фалы используются, что видно из листинга. Это сообщение отредактировал(а) JavaCraft - 31.8.2007, 14:57 |
|||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
В общем не понятно зачем распространяется MinGW 5.1.3 и что с ним делать?
Убрал из Path путь к последней версии. В Code::Blocks указал путь к его собственной версии MinGW, идущей в поставке и не совпадающей с требуемой для QT. Лыжи поехали. Теперь новая ошибка. Не понимает имена файлов.h без раширения На строке #include <QGLWidget> ошибка :: === hellogl, Release === C:\dev\lib\Qt\4.2.3\examples\opengl\hellogl\glwidget.h:27: QGLWidget: No such file or directory и т.д. Изменять код примера, категорически не нужно. Пути к qt\...\include, прописаны. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
надо их дальше прописывать к дерикториям в include
|
|||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Да, это так! ((
Но ведь их много и это скучно. Может есть опция, заставляющая искать во вложенных папках? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
думаю, нет.
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Все эти рассуждения бессмыслены. QT от этого не заработает. |
|||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Согласен, но как его заставить? С MinGW проехали, сейчас я использую ту версию, которая идет с Code::Blocks. С проблемой с путями к хедерам тоже разобрался. Основная проблема в другом. Как заставить Code::Blocks при работе с QT выполнять действия аналогичные QDevelop, чтобы Makefiles получались идентичные или хотя бы приблизительно похожие? Вот к примеру, что он мне выдает при линковке сейчас... Очевидно, проблема с g++, лечится опциями, но какими? Может быть qmake не отработал, который должен всё это настраивать? -------------- Build: Release in hellogl --------------- Compiling: main.cpp Compiling: window.cpp Compiling: glwidget.cpp Linking executable: bin\Release\hellogl.exe obj\Release\main.o:main.cpp:(.text+0xc9): undefined reference to `vtable for Window' obj\Release\main.o:main.cpp:(.text+0xd5): undefined reference to `vtable for Window' obj\Release\main.o:main.cpp:(.text+0x131): undefined reference to `vtable for Window' obj\Release\main.o:main.cpp:(.text+0x13d): undefined reference to `vtable for Window' obj\Release\window.o:window.cpp:(.text+0x198): undefined reference to `vtable for Window' obj\Release\window.o:window.cpp:(.text+0x19f): more undefined references to `vtable for Window' follow obj\Release\window.o:window.cpp:(.text+0x689): undefined reference to `Window::staticMetaObject' obj\Release\window.o:window.cpp:(.text+0x858): undefined reference to `vtable for Window' obj\Release\window.o:window.cpp:(.text+0x85f): undefined reference to `vtable for Window' obj\Release\window.o:window.cpp:(.text+0xd49): undefined reference to `Window::staticMetaObject' obj\Release\glwidget.o:glwidget.cpp:(.text+0x53): undefined reference to `_imp___ZN9QGLWidgetC2EP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE' obj\Release\glwidget.o:glwidget.cpp:(.text+0x70): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x77): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x1b2): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x223): undefined reference to `_imp___ZN9QGLWidgetC2EP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE' obj\Release\glwidget.o:glwidget.cpp:(.text+0x240): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x247): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x382): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x3e3): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x3ea): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x3ef): undefined reference to `_imp___ZN9QGLWidget11makeCurrentEv' obj\Release\glwidget.o:glwidget.cpp:(.text+0x412): undefined reference to `glDeleteLists@8' obj\Release\glwidget.o:glwidget.cpp:(.text+0x425): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x458): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x4c3): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x4ca): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x4cf): undefined reference to `_imp___ZN9QGLWidget11makeCurrentEv' obj\Release\glwidget.o:glwidget.cpp:(.text+0x4f2): undefined reference to `glDeleteLists@8' obj\Release\glwidget.o:glwidget.cpp:(.text+0x505): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x538): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x5a3): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x5aa): undefined reference to `vtable for GLWidget' obj\Release\glwidget.o:glwidget.cpp:(.text+0x5af): undefined reference to `_imp___ZN9QGLWidget11makeCurrentEv' obj\Release\glwidget.o:glwidget.cpp:(.text+0x5d2): undefined reference to `glDeleteLists@8' obj\Release\glwidget.o:glwidget.cpp:(.text+0x5e5): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x623): undefined reference to `_imp___ZN9QGLWidgetD2Ev' obj\Release\glwidget.o:glwidget.cpp:(.text+0x724): undefined reference to `GLWidget::xRotationChanged(int)' obj\Release\glwidget.o:glwidget.cpp:(.text+0x794): undefined reference to `GLWidget::yRotationChanged(int)' obj\Release\glwidget.o:glwidget.cpp:(.text+0x804): undefined reference to `GLWidget::zRotationChanged(int)' obj\Release\glwidget.o:glwidget.cpp:(.text+0x842): undefined reference to `glClear@4' obj\Release\glwidget.o:glwidget.cpp:(.text+0x84a): undefined reference to `glLoadIdentity@0' obj\Release\glwidget.o:glwidget.cpp:(.text+0x877): undefined reference to `glTranslated@24' obj\Release\glwidget.o:glwidget.cpp:(.text+0x8b2): undefined reference to `glRotated@32' obj\Release\glwidget.o:glwidget.cpp:(.text+0x8ed): undefined reference to `glRotated@32' obj\Release\glwidget.o:glwidget.cpp:(.text+0x928): undefined reference to `glRotated@32' obj\Release\glwidget.o:glwidget.cpp:(.text+0x936): undefined reference to `glCallList@4' obj\Release\glwidget.o:glwidget.cpp:(.text+0x993): undefined reference to `glViewport@16' obj\Release\glwidget.o:glwidget.cpp:(.text+0x9a2): undefined reference to `glMatrixMode@4' obj\Release\glwidget.o:glwidget.cpp:(.text+0x9aa): undefined reference to `glLoadIdentity@0' obj\Release\glwidget.o:glwidget.cpp:(.text+0x9ea): undefined reference to `glOrtho@48' obj\Release\glwidget.o:glwidget.cpp:(.text+0x9f9): undefined reference to `glMatrixMode@4' Process terminated with status 1 (0 minutes, 12 seconds) 50 errors, 0 warnings |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Линкер не находит библиотеки. Проверяй пути к ним.
И читай доку, быстрее найдешь решение. |
|||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Какие библиотеки линковать? Я пытаюсь собрать с DLL. Пути к lib и bin прописаны. Статические и динамические библиотеки имеются. При отсутсвии DLL, ошибки, наверное, должны быть на этапе исполнения. В какой доке про это написано? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
JavaCraft, вообще-то линковщику нужно указать какие библиотеки нужно будет использовать. Это делается в настройках проекта. В твоем случае нужно указать, как минимум QtOpenGL, Qtgui и QtCore
|
|||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Это я сделал, а именно, в Release и Debug / Project Build Options / Linker Settings Перечислил эти DLL с полными путями. Ошибка осталась таже самая. Вопрос открыт. Как с наименьшими рутинными настройками (или вообще без них), используя преимущества IDE и информацию из иерархии файлов проектов *.pro, интегрировать библиотеку QT в Code::Blocks, который уже имеет QT-плагин? Это сообщение отредактировал(а) JavaCraft - 3.9.2007, 11:54 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
JavaCraft, ты вообще когда-нибудь читаешь документацию?
1. Не надо указывать полные пути к либам (иначе проект будет непереносим на другие компы). 2. Надо указать в опциях линкера (в настройках среды, не проекта) директории, в которых расположены *.lib или *.a файлы, а не *.DLL!!! 3. Надо в опциях линкера (в настройках проекта) перечислить названия библиотек, без указания префикса lib. |
|||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
1. Я и не указывал, и указывал, ничего не изменилось. Сейчас это не важно, пусть соберет хотя бы с абсолютными путями. Разницу я понимаю. 2.В "настройках среды", точнее в Global Compiler Settings / Search Directories / Compiler - перечислил все пути к инклюдам, в том числе каждую папку каждой библиотеки QT (C:\dev\lib\Qt\4.2.3\include\QtOpenGL). Пути абсолютные, но пока это не важно. Linker - перечислил пути к папкам lib и bin. Вообще то я не понимаю зачем нужны статические библиотеки, когда мне нужно собрать проект с динамическими библиотеками. В паке lib содержатся только *.a и *.prl в папке bin содержатся *.dll и прочее 3. Всяко пробовал. Сейчас сделал именно так - перечислил в свойствах проекта в опциях линкера нужные либы без путей и без расширений Попытался пересобрать пример. Ничего не изменилось. Тот-же листинг ошибок. ps. Makefile даже не создается ps.ps. QT конфигурировалась с опциями configure.exe -release -shared -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg Результат вроде бы нормальный. переменная QMAKESPEC = win32-g++ PATH = ... c:\....\QT\4.2.3\bin Это сообщение отредактировал(а) JavaCraft - 3.9.2007, 13:27 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Конечно... может быть путаница с компиляторами? Раньше QT при сборке библиотеки по умолчанию использовался самый новый MinGW 5.1.3 (хотя QT на него по началу ругнулся, требовал MinGW 3.2.2, но собрался нормально). Но CodeBlock не захотел нормально работать с этой версией компилятора. В CodeBlocks в bin есть собственная версия 3.2.4, с которой что-то как-то наконец заработало, но до указанных выше проблем. Фиг с ним, хотя не порядок конечно с древней версией работать... Сейчас переустанавливаю и пересобираю QT и конкретно указываю ему компилятор, который CodeBlock\bin. Причем QT ругается даже на него, хотя версии различаются только в третьем знаке. Ругается, но конфигурируется и собирается без ошибок. Перед сборкой qmake создал также Makefile.Release и Makefile.Debug по файлам проектов, для каждого примера в Examples Вот теперь вопрос, как правильно и наиболее полно всё это добро использовать в IDE, чтобы не навредить? Вот, что имеется в виду. - Создаю проект QT4 - добавляю в проект имеющиеся C++ и H - добавляю в настройки линкера список библиотек, в настройки компилятора пути к хедерам - добавляю пути в глобальные настройки окружения - В настройках проекта указываю, что использую Custom Makefile. Там галочка такая есть. Надеюсь задействовать имеющиеся файлы, которые сгенерировались при сборке библиотеки. Что дальше? Уже этого много для цели "не навредить". - что делать с шаблонами ($make -f $makefile $target) на вкладке "Make Commands" не знаю. Все переменные определены. Вообще то всё это уже есть в Makefile, Makefile.Release, Makefile.Debug, я проверял. Пытаюсь компилировать. получаю ошибку make.exe: *** No rule to make target `cleanRelease'. Stop. Process terminated with status 2 (0 minutes, 0 seconds) 0 errors, 0 warnings Это сообщение отредактировал(а) JavaCraft - 3.9.2007, 16:58 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
странновато очень... под Винды обычно много непонятных проблем с QT, как минимум вначале. Вот и сейчас я не пойму, чего ему не хватает... Под линем у меня оно заработало из коробки, что называется... |
|||
|
||||
| MrCherry |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2006 Репутация: нет Всего: нет |
блин.. у мен такая же проблема с компиляцией.. ругаетсяиз-за добавлении виртуальной функции в класс...
|
|||
|
||||
| Keeper_B |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
Что то у вас какие то странные проблемы. У меня всё работает
Попробуйте переустановить всё заново. Насчёт работы с Qt я проект делаю так: 1. Выбираю проект Qt в "New from template". 2. Всё как обычно выбираю имя проекта, версии Build target, язык С++. Сохраняю проект. 3. Открываю командную строку "Программы -> Qt by Trolltech v4.3.1 (OpenSources) -> Qt 4.3.1 Command Prompt" и через неё захожу в католог где сохранил проект. Пишу команду qmake - project. Создаётся файл "имя_проекта.pro". Если нужно редактирую его в блокноте (подробнее читайте документацию по Qt). Пишу команду qmake. Создаются файлы "Makefile, Makefile.Debug, Makefile.Release". Эти файлы это сценарии сборки программы. Правлю их в месте где перечислины либы. Удаляю из конца записи букву "d". Например "-lqtmaind -lQtGuid4" -> "-lqtmain -lQtGui4"(это какой то видимо глюк!, так как эти буквы там нафиг ненужны). 4. Дальше что больше нравится 5. А там захоите в свойства проекта. Отмечаю галочкой пункт "This is a custom Makefile"(для того чтобы использовать файлы Makefile созданные программой qmake). 6. Собстно всё. Удачи ;) Добавлено через 2 минуты и 47 секунд Да и ещё, если ваша прога ругаеться на отсутсвие какой нибудь библиотеки, уже при запуске, то надо найти эту либу и просто скопировать в тот же католог, где ваша программа. Или в католог windows\system32. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| Keeper_B |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
||||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
потому что эти библиотеки наверняка не собраны, и их просто нет. Логично, что ругается |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |