当尝试运行各种软件(特别是 Steam 和 Yenka)时,我遇到了类似这样的错误:error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
我运行的是 64 位系统,配有 NVidia Optimus 显卡(我为某些需要专用显卡的 Windows 软件双重启动)。我安装了 bumblebee,并且使用 nvidia-current 驱动程序,而不是按照建议从 NVidia 下载的驱动程序。
该库(libGL.so.1)不存在于 的顶级目录中/usr/lib
,但它存在于 中/usr/lib32/nvidia-current
,作为 的软链接/usr/lib32/nvidia-current/libGL.so.304.64
。
ldconfig -p 的输出部分如下:
libGL.so.1 (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/libGL.so
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so
显然,正在加载具有该名称的库,但它们位于 中/usr/lib/x86_64-linux-gnu
,但是已安装的软件似乎无法“看到”它。对于 Steam,使用 optirun 运行它会使其工作,但对于 Yenka 则不是这样。我假设 optirun 会导致/usr/lib32/nvidia-current
使用存储在 中的库,从而允许 Steam 运行,所以我不明白为什么 Yenka 无法运行。
有人能解释为什么软件看不到正常的 mesa 库,以及为什么 Yenka 拒绝使用 nvidia-current 库运行吗?
答案1
安装 skype 后我遇到了同样的问题...因此您可以采取任一措施来修复此错误..
第一个是通过以下命令运行应用程序...例如我正在运行 skype..
LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1 skype
第二,我做了什么
sudo nano /etc/ld.so.conf.d/skype.conf
并在其中添加以下行
/usr/lib/i386-linux-gnu/mesa/
保存并退出
最后运行
sudo ldconfig -v
我希望这能解决你的问题库GL.so.1错误,就像我的一样
您还可以找到 libGL.so.1
find / -name libGL.so.1
答案2
安装 nvidia 驱动程序后,skype 会查找 nvidia 软件包提供的 i386 lib。由于不存在,因此可以使用 mesa 提供的 i386 libGL.so.1。
在 (ubuntu-gnome raring,使用 nvidia-325) 和 (ubuntu-gnome saucy,使用 nvidia-319) 上进行了测试,我们可以通过以下方法修复此问题:
update-alternatives --display i386-linux-gnu_gl_conf
这将向您显示可用的选项。
i386-linux-gnu_gl_conf - auto mode
link currently points to /usr/lib/nvidia-325/alt_ld.so.conf
/usr/lib/i386-linux-gnu/mesa/ld.so.conf - priority 500
slave i386-linux-gnu_xorg_extra_modules: /usr/lib/i386-linux-gnu/xorg/x11-extra-modules
/usr/lib/nvidia-325/alt_ld.so.conf - priority 8602
Current 'best' version is '/usr/lib/nvidia-325/alt_ld.so.conf'
因此,请执行以下操作:
sudo update-alternatives --config i386-linux-gnu_gl_conf
然后选择最佳替代方案(我选择了 i386-linux-gnu/mesa/ld.so.conf):在下面的输出中,有两个替代方案 i386-linux-gnu_gl_conf(提供 /etc/ld.so.conf.d/i386-linux-gnu_GL.conf)。
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/nvidia-325/alt_ld.so.conf 8602 auto mode
1 /usr/lib/i386-linux-gnu/mesa/ld.so.conf 500 manual mode
2 /usr/lib/nvidia-325/alt_ld.so.conf 8602 manual mode
Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/i386-linux-gnu/mesa/ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode
完成后,尝试运行:
sudo ldconfig
然后你就完成了。
答案3
这里的修复会起作用,但还有一个更简单的方法。
如果skype
不起作用但optirun skype
确实有效,那么您可以使用以下方法修复它:
sudo apt-get install bumblebee-nvidia --reinstall
(使用带有 AMD 卡的 Bumblebee 的用户可能需要进行等效的重新安装)。
Bumblebee 既能导致这个问题,也能解决这个问题,但它的修复是在安装时进行的,此时它使 libGL 库可供集成卡和功能更强大的卡使用。如果在安装 Bumblebee 时尚未安装这些库,则不会发生这种情况,因此需要重新安装。它也不会影响您的 bumblebee 配置,不过显然在完成此操作后值得检查一下。
答案4
我不确定这是否有助于澄清问题,但我在 skype 和 libGL.so.1 方面也遇到了同样的问题。还运行了 13.04,带有 optimus 卡和 bumblebee。
我在不使用 optirun 的情况下运行 skype 时遇到了问题,但使用 optirun 时运行正常。我只需将桌面文件更改为每次都使用 optirun 即可,然后就解决了!