我在编译 SFML 项目时遇到问题(看不到任何图形):
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
可以通过本教程简单地重新安装 nvidia-drivers 来解决此错误:https://askubuntu.com/a/451248/341889
..但是当我获得新的更新时 - 此错误再次出现;(我该怎么办?这不是解决方案 - 不使用系统更新...
PS,是的,安装 nvidia-drivers 后我保存了所有更改
答案1
问题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 库(在第一个查找命令中列出)。
总结:安装(专有)图形驱动程序可能会破坏用于 OpenGL 库的符号链接。要解决此问题,请手动修复符号链接(/usr/local/lib/libGL.so.1.2.0
先修复)。
答案2
在 ubuntu 18 上遇到了同样的问题。这种情况基本上只发生在 32 位应用程序中。所以我的想法是安装 32 位 nvidia 的东西,因为我的 /usr/lib/i386-linux-gnu/ 文件夹可疑地是空的。
经过几次尝试,这解决了我的蒸汽和葡萄酒无法启动的问题:
sudo apt install libnvidia-gl-418:i386
(并将 418 更改为您拥有的任何版本)
有趣的是,应用程序在安装过程中没有抱怨缺少依赖项。
答案3
我在获取正确的符号链接指向 nVidia 驱动程序时遇到了问题,于是我找到了另一种适合我的方法。
它概述这里。
它列出了如何通过 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+MB 的系统更新后它仍然可以工作。
答案4
我只使用这一行:
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