Название: Ошибка компоновщика Отправлено: __Heaven__ от Июль 09, 2014, 14:12 Здравствуйте, всем!
Прошу помочь мне разобраться с проблемой: Я занимаюсь изучением OpenGL по Суперкниге и пишу примерчики из неё на Qt. К проекту очередного примера мне было необходимо подтянуть несколько хэдэров и исходников из папки examples/common. Но тут столкнулся с ошибкой при компоновке Код: ошибка: undefined reference to `gltTransformPoint' Понимаю, что ошибка, скорее всего, пустяковая, но в упор не вижу причины. Предпринимал действия: Запускал предложенный в примере файл проекта MSVC, приписывал расположение glut32 и он работал. В папке примера выполнял qmake -project, в .pro файл прописывал glut32 - ошибка та же. Эти же действия на другом примере дали положительный результат. Во вложении сам пример, общие файлы ко многим примерам из книги, библиотека glut с диска от книги. Название: Re: Как правильно внести в проект файлы cpp и h Отправлено: kambala от Июль 09, 2014, 17:49 может еще библиотеку надо подключить?
Название: Re: Как правильно внести в проект файлы cpp и h Отправлено: Igors от Июль 09, 2014, 18:53 может еще библиотеку надо подключить? А может еще скажете какую? :)2__Heaven__ Ну причем здесь cpp и h если Вы сами говорите "ошибка компоновщика". Просто тупо ищите все файлы в которых unresolved (gltTransform). Такого lib файла у Вас нет - значит надо его где-то доставать скачивать (а не пробовать компиляторы). Наберите в гугле напр "gltools library download" - вот первая ссылка, товарищ тоже ищет. Название: Re: Как правильно внести в проект файлы cpp и h Отправлено: __Heaven__ от Июль 09, 2014, 19:45 2__Heaven__ Ну причем здесь cpp и h если Вы сами говорите "ошибка компоновщика". Просто тупо ищите все файлы в которых unresolved (gltTransform). Такого lib файла у Вас нет - значит надо его где-то доставать скачивать (а не пробовать компиляторы). Наберите в гугле напр "gltools library download" - вот первая ссылка, товарищ тоже ищет. Не смог сформулировать тему - переправил.Дело в том, что такая функция определена в .c файле, который имеется в папке common. Я его тоже подтягивал в проект, но это не помогло... Название: Re: Ошибка компоновщика Отправлено: Igors от Июль 09, 2014, 20:02 Загрузил Ваш проект в MSVС 2012, добавил glut32.lib в проект, отключил SAFESH в линкере. Положил glut32.dll рядом с exe. Запускается, работает
Название: Re: Ошибка компоновщика Отправлено: Bepec от Июль 09, 2014, 20:16 Морока с путями у вас скорее всего :)
Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 09, 2014, 21:17 Загрузил Ваш проект в MSVС 2012, добавил glut32.lib в проект, отключил SAFESH в линкере. Положил glut32.dll рядом с exe. Запускается, работает Предпринимал действия: Запускал предложенный в примере файл проекта MSVC, приписывал расположение glut32 и он работал. Igors, меня больше интересует, почему у меня не получается выполнить пример именно в среде Qt Creator (mingw). Это переходит в спортивный интерес, так сказать :). Морока с путями у вас скорее всего :) Мне кажется, что нет. До этого момента я выполнил около десятка примеров с использованием glut... А здесь появились эти .c и .h... Я их перенес в папку с моим проектом.Единственное, что меня сейчас интуитивно смущает, следующий код. В файле GLTools.h: Код: #include <windows.h> Подключение к проекту с чистым примером QT += opengl не подходит... Возможно ли, что какая-то gl либа не подтягивается? Название: Re: Ошибка компоновщика Отправлено: kambala от Июль 09, 2014, 21:37 LIBS += -lglut32
Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 10, 2014, 06:43 LIBS += -lglut32 Это само собой. + -L"Путь к glut32"Название: Re: Ошибка компоновщика Отправлено: kambala от Июль 10, 2014, 13:31 чтобы заработало через креатор, пришлось выбросить Common\glut.h из pro и пару инклудов подправить (я по-другому расположил файлы). библиотеку я добавлял через Add Library...
выкладываю рабочий проект. Название: Re: Ошибка компоновщика Отправлено: Igors от Июль 10, 2014, 15:30 Igors, меня больше интересует, почему у меня не получается выполнить пример именно в среде Qt Creator (mingw). Это переходит в спортивный интерес, так сказать :). Вероятно потому что хедер GLTools.h не очень грамотный. Если ф-ция определена в с файле, то в хедере она должна быть объявлена как extern "C". Попробуйте измененный хедер (аттач)Подключение к проекту с чистым примером QT += opengl не подходит... Возможно ли, что какая-то gl либа не подтягивается? Там своя OpenGL-песня (ES, ES2), с Вашим примером это наверняка несовместимо Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 10, 2014, 17:29 Igors, меня больше интересует, почему у меня не получается выполнить пример именно в среде Qt Creator (mingw). Это переходит в спортивный интерес, так сказать :). Вероятно потому что хедер GLTools.h не очень грамотный. Если ф-ция определена в с файле, то в хедере она должна быть объявлена как extern "C". Попробуйте измененный хедер (аттач)не помогло, к сожалению... Название: Re: Ошибка компоновщика Отправлено: kambala от Июль 10, 2014, 17:57 что мешает взять готовый рабочий проект который я выложил?
Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 10, 2014, 19:58 что мешает взять готовый рабочий проект который я выложил? Очень извиняюсь!!! Не заметил Вашего сообщения.Попытался сейчас запустить Ваш код и ничего не получил... См. аттач Название: Re: Ошибка компоновщика Отправлено: kambala от Июль 10, 2014, 20:38 у меня и дебаг и релиз работает. использую Qt 5.3.0 MSVC2012 OpenGL 32bit. похоже, что твоему mingw компилятору что-то не нравится.
Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 10, 2014, 21:08 у меня и дебаг и релиз работает. использую Qt 5.3.0 MSVC2012 OpenGL 32bit. похоже, что твоему mingw компилятору что-то не нравится. Совершенно забыл, что у меня установлен компилятор MSVC2013. Я запустил Ваш код и он работает. Наверное, действительно, под MS лучше использовать MS компилятор...Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 10, 2014, 21:10 Кстати! А файлы .lib, они компиляторозависимы?
Название: Re: Ошибка компоновщика Отправлено: Old от Июль 10, 2014, 21:14 Кстати! А файлы .lib, они компиляторозависимы? Да.Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 10, 2014, 23:09 Меня удивляло и продолжает удивлять, тот факт, что я написал около 3 примеров с использованием той самой glut32.lib и они компилируются... как такое возможно?
Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 14, 2014, 09:25 Решил!
Для нормальной компиляции проекта понадобилось перед употреблением #include <glut.h> написать Код: #define _STDCALL_SUPPORTED Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 21, 2014, 10:52 Решил! Для нормальной компиляции проекта понадобилось перед употреблением #include <glut.h> написать Код: #define _STDCALL_SUPPORTED Это мнение оказалось ошибочным. Настоящая проблема оказалась такая: Когда у меня файл с расширением .c, то всё компонуется на ура, а когда я его переименовываю в .cpp, то "привет, проблема". Я так понимаю, что нужно искать какую-то директиву препроцессора? Или в какую сторону копать? Название: Re: Ошибка компоновщика Отправлено: Kurles от Июль 21, 2014, 11:11 Решил! Для нормальной компиляции проекта понадобилось перед употреблением #include <glut.h> написать Код: #define _STDCALL_SUPPORTED Это мнение оказалось ошибочным. Настоящая проблема оказалась такая: Когда у меня файл с расширением .c, то всё компонуется на ура, а когда я его переименовываю в .cpp, то "привет, проблема". Я так понимаю, что нужно искать какую-то директиву препроцессора? Или в какую сторону копать? Код
Название: Re: Ошибка компоновщика Отправлено: Kurles от Июль 21, 2014, 11:13 дел, повтор
Название: Re: Ошибка компоновщика Отправлено: __Heaven__ от Июль 21, 2014, 11:14 Такая штука обычно, если пытаешься сишные заголовочные файлы к плюсовому проекту подключить. Попробуй так: Да, проблема оказалась во мне. Я пытался в одном проекте совместить файлы .c и .cpp. Не знал, что так делать нельзя.Код
P.S.: дошёл до этого сам, потом прочитал Ваше сообщение :) |