该swrast
事情是软件渲染器。这意味着它没有找到图形卡的硬件驱动程序。安装了一堆libGL库,以及到这些库的一堆符号链接。要查看这些内容,请从外壳程序中运行:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
现在,可能是您出现问题的原因是,安装图形驱动程序有时会破坏这些符号链接。(特别/usr/local/lib/libGL.so.1.2.0
可能是错误的lib或指向错误链接的符号链接)。
要确定OpenGL程序试图运行的库,您可以打开一些详细信息并运行一个简单的OpenGL程序。您可以使用标准的OpenGL测试程序来验证这一点:
LIBGL_DEBUG=verbose glxgears
希望这将以与SFML相同的方式失败。有了LIBGL_DEBUG
它应该告诉你什么OpenGL库它试图加载。此外,几乎可以肯定要尝试加载的/usr/local/lib/libGL.so.1.2.0
库(编辑:这是我回答此书时机器上的标准OpenGL库。现在很可能是机器上的其他版本)。
因此解决方案(在这种情况下)是确保这/usr/local/lib/libGL.so.1.2.0
是指向正确的OpenGL库的符号链接。就我而言,我拥有Nvidia 3.40驱动程序,因此我运行了:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
但是,您需要将其指向适合您的OpenGL库(在第一个find命令中列出)。
总结:安装(专有)图形驱动程序可能会中断用于OpenGL库的符号链接。要解决此问题,请手动修复符号链接(/usr/local/lib/libGL.so.1.2.0
先修复)。
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
。默认情况下,/usr/lib/nvidia-361/libGL.so
由于我的Ubuntu 16.04使用/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
它,因此一切正常。