c++ - 链接计算着色器

标签 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

我错过了什么?

最佳答案

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

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

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

关于c++ - 链接计算着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339465/

相关文章:

c++ - 使用 select 多路复用未命名管道和其他文件描述符

c++ - 为什么将 const 指针初始化为 null 时没有警告或错误?

c - 如何防止 Visual C 编译器优化掉 "unused"全局变量

c++ - 使用 Boost.build 包含一个库

c++ - FFmpeg - 通过管道提供原始帧 - FFmpeg 不检测管道关闭

c++ - 绘制形状后 gluLookAt 无法正常工作

c - OpenGL GL_POINTS 结果与输入不同

java - 在 Windows 上的小纹理上使用 MipMap 时 JVM 崩溃

c++ - 编译独立的静态可执行文件

c++ - GNU Linker 找不到本地共享库