swrast
是软件渲染器。这意味着它没有找到您的显卡的硬件驱动程序。有一堆安装了的libGL库和一堆指向这些库的符号链接。要查看这些,请在shell中运行以下命令:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
现在,您的问题可能是由于安装图形驱动程序时破坏了这些符号链接引起的。(具体来说,/usr/local/lib/libGL.so.1.2.0很可能是错误的库或指向错误链接的符号链接)(注意:我写这篇文章已经有一段时间了。libGL.so.1.2.0是当前的gl版本,现在可能是其他版本)。
为了确定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
来启动一个OpenGL可执行文件,就会发生这种情况:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
。默认情况下,我的Ubuntu 16.04使用/usr/lib/nvidia-361/libGL.so
,因为有/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
,一切都正常运行。 - Ciro Santilli OurBigBook.com