问题描述
编译SFML-project时出现问题(看不到任何图形):
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
可以通过以下教程简单地重新安装nvidia-drivers来解决此错误:https://askubuntu.com/a/451248/341889
..但是当我获得新的更新时-此错误返回;(我该怎么办?这不是解决方案-请勿使用系统的更新…
附言是的,我在安装nvidia-drivers之后保存了所有更改
最佳方法
swrast
是软件渲染器。这意味着它没有找到图形卡的硬件驱动程序。安装了一堆libGL库,以及到这些库的一堆符号链接。要查看这些内容,请从 shell 程序运行:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
现在,您问题的可能原因是安装图形驱动程序有时会破坏这些符号链接。 (特别是/usr/local/lib/libGL.so.1.2.0
可能是错误的lib或指向错误链接的符号链接)(注:我之前写过这个。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
)。
次佳方法
在ubuntu 18上也遇到了同样的问题。这基本上只发生在32位应用程序上。所以我的想法是安装32位nvidia,因为我的/usr /lib /i386-linux-gnu /文件夹可疑是空的。
经过极少的尝试,这解决了我的蒸汽和红酒无法开始的问题:
sudo apt install libnvidia-gl-418:i386
(并将418更改为您拥有的任何版本)
有趣的是,应用程序没有抱怨安装过程中缺少依赖项。
第三种方法
我在获取正确的符号链接以指向nVidia驱动程序时遇到了问题,我发现了另一种对我有用的方法。
概述为here。
并且列出了如何通过PPA安装nVidia驱动程序,该驱动程序可用于最新版本349.16。
首先通过打开终端窗口(Ctrl
+ ALT
+ T
)并键入以下内容来卸载当前安装的所有nVidia驱动程序:
sudo apt-get remove nvidia*
重新启动系统
然后打开另一个终端并输入以下内容
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-349 nvidia-settings
sudo add-apt-repository -r ppa:xorg-edgers/ppa
然后再次重启
我在失去符号链接后尝试了此操作,并且在安装驱动程序后Steam可以立即正常运行,并且在我进行了400多兆的系统更新后它仍然可以正常工作。
第四种方法
我在使用nvidia-340
驱动程序的Ubuntu 16.10上遇到了相同的问题,这里的任何解决方案都不适合我。
原来32位库不在库路径上。
这条班轮为我工作:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-340"
第五种方法
我只用这行:
sudo rm /usr/lib/i386-linux-gnu/libGL.so.1
而且有效。
因为我在执行sudo ldconfig -p | grep -i gl.so
时看到这样的输入:
libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
libOpenGL.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so
libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1
libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1
libEGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so
第六种方法
要提供替代Adrian的答案:如果您更喜欢使用直接来自NVIDIA的专有驱动程序而不是PPA中的驱动程序,则安装最新的专有驱动程序(在我的情况下为re-installing)可以帮助消除错误。
如果您还没有NVIDIA驱动程序,请从NVIDIA’s website下载驱动程序。接下来,切换到tty(ctrl
+ alt
+ F1
)并关闭登录管理器:
如果使用lightdm,则$ sudo service lightdm stop
如果使用gdm,则$ sudo service gdm stop
导航到安装脚本并运行它,然后按照提示进行操作。如果预安装脚本失败,请不要担心。我始终接受注册DKMS和32位兼容性库。安装驱动程序后,重新启动计算机:
$ sudo reboot
如果您已经具有旧版NVIDIA驱动程序的安装脚本,只需按照上面所述运行NVIDIA驱动程序安装脚本,但要使用”–update”选项:
$ sudo ./NVIDIA-Linux-x86_64-***.**.run --update
这将为您提供最大的up-to-date版本的驱动程序。
这样做解决了我的libGL error: failed to load driver: swrast
错误。