我正在尝试正确运行OpenGL程序。我正在使用带有GT 630M的笔记本电脑,操作系统是64位的Fedora 16。它使用bumblebee,我必须在每个可执行文件之前使用optirun
来访问GPU。
这是glx信息:
[sj755@localhost WINDOWS_VERSIONS]$ glxinfo | grep OpenGL
OpenGL vendor string: Tungsten Graphics, Inc
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile
OpenGL version string: 2.1 Mesa 7.11.2
OpenGL shading language version string: 1.20
OpenGL extensions:
[sj755@localhost WINDOWS_VERSIONS]$ optirun glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 630M/PCIe/SSE2
OpenGL version string: 4.2.0 NVIDIA 295.49
OpenGL shading language version string: 4.20 NVIDIA via Cg compiler
OpenGL extensions:
我正在尝试编译的程序来自一本名为“交互式计算机图形学”的书,源代码可以在这里下载:http://www.cs.unm.edu/~angel/BOOK/INTERACTIVE_COMPUTER_GRAPHICS/SIXTH_EDITION/
我只是使用以下命令编译示例程序:
nvcc -o example1 example1.cpp ../../Common/InitShader.cpp -I ../../include/ -I /usr/include/GL/ -L /usr/include/GL/ -lglut -lGL -lGLEW -lGLU -lX11 -lXmu -lXi -lm -lpthread
当我像optirun ./example1
那样运行程序时,我遇到了一个段错误。我不确定它是库还是我编译它的方式,但似乎永远不会起作用。
如果我尝试使用./example1
运行示例,则会收到以下错误:
glXCreateContextAttribsARB not found
关于如何让OpenGL 4.1在这台笔记本电脑上运行的任何想法?
注意:我的CUDA程序成功运行。
更新:输出ldd ./example1
[sj755@localhost WINDOWS_VERSIONS]$ ldd ./example1
linux-vdso.so.1 => (0x00007fff31b1c000)
libglut.so.3 => /usr/lib64/libglut.so.3 (0x00007f4d0b7dc000)
libGL.so.1 => /usr/lib64/libGL.so.1 (0x0000003990a00000)
libGLEW.so.1.6 => /usr/lib64/libGLEW.so.1.6 (0x000000389b600000)
libGLU.so.1 => /usr/lib64/libGLU.so.1 (0x00000038a0000000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x000000397a800000)
libXmu.so.6 => /usr/lib64/libXmu.so.6 (0x000000389f800000)
libXi.so.6 => /usr/lib64/libXi.so.6 (0x000000397c400000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003976800000)
libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007f4d0b57d000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003983800000)
libm.so.6 => /lib64/libm.so.6 (0x0000003977400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003977800000)
libc.so.6 => /lib64/libc.so.6 (0x0000003976400000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x000000397b000000)
libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1 (0x000000398e600000)
libXdamage.so.1 => /usr/lib64/libXdamage.so.1 (0x000000397f800000)
libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x000000397d000000)
libdrm.so.2 => /usr/lib64/libdrm.so.2 (0x0000003991200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003976c00000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x000000397a000000)
libXt.so.6 => /usr/lib64/libXt.so.6 (0x0000003996e00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003976000000)
librt.so.1 => /lib64/librt.so.1 (0x0000003977000000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x000000397ac00000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x0000003988400000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x0000003988800000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x0000003980800000)
答案 0 :(得分:3)
实际上这是一个VirtualGL错误。
您可以从此处获取更多信息:https://github.com/Bumblebee-Project/Bumblebee/issues/209
问题可以通过virtualgl的新(每日)版本来解决:http://virtualgl.sourceforge.net/vgl.nightly/但为了让它工作,你应该删除大黄蜂附带的那个。
答案 1 :(得分:0)
原来我的程序链接到NVIDIA的OpenGL库。问题在于代码本身。这几乎解决了我的大部分问题:http://openglbook.com/glgenvertexarrays-access-violationsegfault-with-glew/
这就解释了为什么我能够编译和运行所有使用仅在OpenGL 4中找到的tesselation的cg示例。