Я пытаюсь скомпилировать этот маленький пример и у меня есть эта ошибка при выполнении make:
g++ -o ogl_cs_example main.cpp opengl_cs.cpp opengl_util.cpp -Wall -Iinclude -lX11 -lGL -lGLU
/tmp/ccFLIOt2.o: In function `updateTex(int)':
main.cpp:(.text+0xc6): undefined reference to `glDispatchCompute'
/tmp/ccQ8pShN.o: In function `genTexture()':
opengl_util.cpp:(.text+0x3df): undefined reference to `glBindImageTexture'
/tmp/ccQ8pShN.o: In function `initGL()':
opengl_util.cpp:(.text+0x7dd): undefined reference to `glXCreateContextAttribsARB'
collect2: error: ld returned 1 exit status
make: *** [example] Error 1
Что мне не хватает?
Все эти функции являются расширениями OpenGL / GLX, которые не предоставляются минимальной реализацией вашей платформы.
Вы должны загрузить их во время выполнения, используя glXGetProcAddress (...)
они не содержатся ни в одной библиотеке, на которую вы ссылаетесь напрямую. Хотя вы можете ссылаться на библиотеку управления расширениями, такую как GLEW чтобы сделать грязную работу за вас, вам все равно придется сделать больше, чем просто добавить новую зависимость от ссылок.
Вы обычно должны инициализировать указанные библиотеки после Вы создаете свой контекст визуализации OpenGL. Стоит отметить, что одна вещь, которая отличает WGL (Windows) и GLX (X11), заключается в том, что вам не нужно создавать контекст GL, прежде чем вы сможете загружать расширения с помощью GLX, так что вы действительно можете загрузить glXCreateContextAttribsARB
, glDispatchCompute
а также glBindImageTexture
прежде чем у вас есть контекст. Будут ли последние два указателя функций что-либо делать во время выполнения, это отдельная история, и она зависит от возможностей контекста, который вы создали.
Вы забыли что-то связать. Если вы используете GLEW, убедитесь, что вы ссылаетесь на glew32.lib (или libglew32.a или что-то еще для вашей системы).
неопределенная ссылка означает, что вы не связывались с библиотеками