GCC SDL + GLEW ошибки соединения - PullRequest
1 голос
/ 14 ноября 2011

У меня есть статическая библиотека, в которой я вызываю функции расширения OpenGL через GLEW.Поскольку проект строится в GCC (NetBeans 7.0), а двоичные файлы GLEW поставляются только с версией Visual-C, я создал GLEW (1.7.0) как статическую библиотеку с GCC.(Мне также было бы интересно, почему это необходимо, поскольку GLEW кажется чистым C, в котором совместимость ABI и кросс-компиляции не является проблемой AFAIK.)

В моей статической библиотеке я определяю GLEW_STATIC и NO_SDL_GLEXTв качестве директив препроцессора проекта (-D), то I

#include "GL/glew.h"
#include "SDL/SDL.h"

Статическая библиотека затем связывается с (тестовым) приложением, которое также связывается со следующими библиотеками, в следующем порядке:

my_static_library
mingw32
glew32
opengl32
SDLmain
SDL

Эта установка дает мне две неопределенные ошибки ссылок в моей статической библиотеке:

undefined reference to `_imp____glewGetStringi'
undefined reference to `_imp__glewInit'

Действительно, это два вызова функциональности GLEW в статической библиотеке.Однако есть и другие вызовы, на которые компоновщик жаловался (до -DGLEW_STATIC), но сейчас все в порядке.

Я не смог улучшить ситуацию, поменяв порядок связывания с opengl32 и glew32(еще несколько undef'd ссылок на wgl... звонки).Кроме того, GLEW_STATIC (и NO_SDL_GLEXT) раньше определялись в тестовом приложении, но он был удален и, похоже, не имеет значения.

Почему возникают оставшиеся ошибки и что я могу сделать, чтобы избавиться от них, т.е. как я могу использовать GLEW в GCC с SDL?

1 Ответ

1 голос
/ 14 ноября 2011

Ваша библиотека была построена таким образом, что для ссылки на версию DLL GLEW - _imp____glewGetStringi и _imp__glewInit являются символами библиотеки импорта, то есть сочетание определений привело к появлению следующей строки при компиляции;

extern __declspec(dllimport) PFNGLGETSTRINGIPROC __glewGetStringi;

Это может произойти, если вы не определили GLEW_STATIC при компиляции библиотеки (но вы делаете это; дважды проверьте каждый объект)

или

в вашей версии GLEW есть ошибка в заголовках. В GLEW 1.7.0 он работает как положено.

...