当前位置: 首页>>技术教程>>正文


drivers – libGl,fbConfigs的问题在每次更新时都会出现问题?

, , ,

问题描述

编译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错误。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11780.html,未经允许,请勿转载。