我尝试编译这个小example,我在执行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
我错过了什么?
答案 0 :(得分:1)
这些功能都是OpenGL / GLX扩展,而平台的最小实现并未提供这些扩展。
您必须使用glXGetProcAddress (...)
在运行时加载它们,它们不包含在您直接链接到的任何库中。虽然您可以链接到扩展管理库(例如GLEW)来为您执行脏工作,但您仍需要做的不仅仅是添加新的链接依赖项。
您通常必须在创建OpenGL渲染上下文后 初始化所述库 。值得指出的是,将WGL(Windows)和GLX(X11)区分开来的一件事是,您无需在使用GLX加载扩展之前创建GL上下文,因此您实际上可以加载glXCreateContextAttribsARB
,在有上下文之前glDispatchCompute
和glBindImageTexture
。然后,您获得的后两个函数指针是否会在运行时执行任何操作,这取决于您创建的上下文的功能。
答案 1 :(得分:0)
未定义的引用意味着您没有链接到库
答案 2 :(得分:0)
你忘了链接一些东西。如果您使用的是GLEW,请确保链接到glew32.lib(或libglew32.a或您系统的任何内容)。