2012-06-01 44 views
2

我想正确运行OpenGL程序。我使用的是带有GT 630M的笔记本电脑,操作系统是Fedora 16 64位。它使用大黄蜂,我必须在每个可执行文件访问GPU之前使用optirun链接到NVIDIA OpenGL库

这里是GLX信息:

[[email protected] 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: 
[[email protected] 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程序已成功运行。

UPDATE:LDD ./example1

[[email protected] 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) 
+2

'ldd。/ example1'的输出显示了什么?链接加载器很可能找到了mesa OpenGL库,而不是NVIDIA的。 – talonmies

+0

@talonmies更新了问题以显示结果。 – sj755

回答

0

的输出结果,我的计划被链接到NVIDIA的OpenGL库。问题出在代码本身上。这几乎解决了大多数我的问题:http://openglbook.com/glgenvertexarrays-access-violationsegfault-with-glew/

这就解释了为什么我能够编译和运行所有使用镶嵌仅在OpenGL 4

+0

死链接,但在这里找到它:http://web.archive.org/web/20130211010955/http://openglbook.com/glgenvertexarrays-access-violationsegfault-with-glew/ – personne3000