链接计算着色器

时间:2014-01-24 18:08:42

标签: c++ opengl linker compute-shader

我尝试编译这个小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

我错过了什么?

3 个答案:

答案 0 :(得分:1)

这些功能都是OpenGL / GLX扩展,而平台的最小实现并未提供这些扩展。

您必须使用glXGetProcAddress (...)在运行时加载它们,它们不包含在您直接链接到的任何库中。虽然您可以链接到扩展管理库(例如GLEW)来为您执行脏工作,但您仍需要做的不仅仅是添加新的链接依赖项。

您通常必须在创建OpenGL渲染上下文后 初始化所述库 。值得指出的是,将WGL(Windows)和GLX(X11)区分开来的一件事是,您无需在使用GLX加载扩展之前创建GL上下文,因此您实际上可以加载glXCreateContextAttribsARB,在有上下文之前glDispatchComputeglBindImageTexture。然后,您获得的后两个函数指针是否会在运行时执行任何操作,这取决于您创建的上下文的功能。

答案 1 :(得分:0)

未定义的引用意味着您没有链接到库

答案 2 :(得分:0)

你忘了链接一些东西。如果您使用的是GLEW,请确保链接到glew32.lib(或libglew32.a或您系统的任何内容)。