【问题标题】:Linking to the NVIDIA OpenGL library链接到 NVIDIA OpenGL 库
【发布时间】:2012-06-06 09:50:33
【问题描述】:

我正在尝试正确运行 OpenGL 程序。我正在使用带有 GT 630M 的笔记本电脑,操作系统是 Fedora 16 64 位。它使用 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)

【问题讨论】:

  • ldd ./example1 的输出显示了什么?链接加载器很可能正在查找 mesa OpenGL 库而不是 NVIDIA 库。
  • @talonmies 更新问题以显示结果。

标签: opengl cuda glut nvidia glew


【解决方案1】:

原来我的程序链接到 NVIDIA 的 OpenGL 库。问题在于代码本身。这几乎解决了我的大部分问题:http://openglbook.com/glgenvertexarrays-access-violationsegfault-with-glew/

这解释了为什么我能够编译和运行所有使用只有在 OpenGL 4 中才能找到的曲面细分的 cg 示例。

【讨论】:

【解决方案2】:

实际上这是一个 VirtualGL 错误。

您可以从这里获得更多信息:https://github.com/Bumblebee-Project/Bumblebee/issues/209

这个问题可以用新的(每日)版本的 virtualgl 来解决:http://virtualgl.sourceforge.net/vgl.nightly/ 但是要让它工作,你应该删除它,它是 bumblebee 附带的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 2014-10-27
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多