Проблемы со связью GLEW в SFML-проекте с использованием CodeBlocks - PullRequest
3 голосов
/ 07 сентября 2011

Итак, я пытаюсь научиться писать шейдеры и включать их в свою программу OpenGL (я использую SFML 1.6 для создания правильной среды OpenGL, а не слоняюсь без дела с GLUT; моя IDE - это Codeblocks; моя карта поддерживает OpenGL 3.1 и GLSL1.3).Я наткнулся на загадку, однако;похоже, мне нужен GLEW, чтобы помочь включить шейдеры GLSL в мою программу.Поэтому я пошел и нашел исходный код в GLEW и скомпилировал его как статические библиотеки, используя CodeBlocks, в соответствии с инструкциями окончательного комментария здесь (я добавил #define GLEW_STATIC в файл c., Так как он не былмне ясно, где я должен был его добавить), так что теперь у меня есть четыре .a файла:

libglew32.a, libglew32d.a, libglew32mx.a, libglew32mxd.a

Я сказал своему компилятору, где найти файлы заголовков (glew.h, glxew.h, wglew.h), и я сказал компоновщику, где искать библиотеки (выше), добавивсоответствующие каталоги в Настройки-> Компилятор и отладчик ...-> Поиск в каталогах.В моем проекте в разделе Параметры сборки-> Настройки компоновщика-> Библиотеки ссылок я также связал четыре приведенных выше.

При выполнении всего вышеперечисленного я получил следующую ошибку при попытке вызвать glewInit ():

неопределенная ссылка на '_imp__glewInit'

Некоторые чтение сказали мне, что мне нужно было добавить #define GLEW_STATIC перед #include <glew.h>, поэтому я сделалчто, и теперь я получаю целую кучу неопределенных ссылок на ошибки "wglGetProcAddress @ 4" (единственная строка кода GLEW в моей программе glewInit();):

 Design\Learning C++\OPEN-GL\OpenGL Experiment 6 - 27-block Terrain Test\main.cpp||In function 'int main()':|
 Design\Learning C++\OPEN-GL\OpenGL Experiment 6 - 27-block Terrain Test\main.cpp|43|warning: unused variable 'LightOn'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetCurrentDC@0'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `glGetString@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetProcAddress@4'|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| more undefined references to `wglGetProcAddress@4' follow|
C:\Program Files (x86)\CodeBlocks\MinGW\downloaded\glew-1.7.0\afiles\libglew32.a(glew.o):glew.c|| undefined reference to `wglGetCurrentDC@0'|
||=== Build finished: 23 errors, 1 warnings ===|

Я в растерянности;технические аспекты всего этого (связывание / компиляция / и т. д.) все еще являются новыми и сбивают меня с толку.

Что мне нужно сделать, чтобы заставить работать GLEW, чтобы я мог включить шейдеры GLSL вмой SFML проект OpenGL?(Или я могу как-то проще сделать это без GLEW или каких-либо других внешних библиотек? Что было бы здорово!)

1 Ответ

4 голосов
/ 07 сентября 2011

Вам также нужно связать opengl32.lib. Эти функции, на которые не ссылается компоновщик, являются частью opengl32.dll, и для доступа к ним вам нужно дать ссылку на него. Не в статической библиотеке, а в вашей финальной программе. Технически статические библиотеки - это не что иное, как архивы объектных файлов, т. Е. Результат этапа компиляции. Связывание с библиотеками DLL должно происходить в контексте исполняемого двоичного файла.

...