加载libGL.so.1时出错


48

尝试运行各种软件(尤其是Steam和Yenka)时,遇到类似以下错误: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

我正在运行一个带有NVidia Optimus卡的64位系统(我为需要专用显卡的某些Windows仅双引导软件)。我已经安装了大黄蜂,并且我正在使用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不会运行。

谁能解释为什么软件看不到普通的台面库,为什么Yenka拒绝使用nvidia当前库运行?

Answers:


40

安装了nvidia驱动程序后,skype会寻找nvidia软件包提供的i386库。由于不存在,因此可以使用mesa提供的i386 libGL.so.1。

在(使用nvidia-325的ubuntu-gnome raring)和(使用nvidia-319的ubuntu-gnome saucy)上进行了测试,我们可以通过以下方法解决此问题:

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

然后就完成了。


2
我完全一样,而且效果很好,非常感谢(Ubuntu 13.10)
Xtremesupremacy3

烦人-我只有ld.so.conf选项,因此请获取“链接组i386-linux-gnu_gl_conf中只有一个替代方法(提供/etc/ld.so.conf.d/i386-linux-gnu_GL.conf) :/usr/lib/i386-linux-gnu/mesa/ld.so.conf。无需进行任何配置。”
dez93_2000 2014年

您安装了哪些nvidia软件包?您是否安装了libgl1-mesa-glx?在可信赖的libgl1-mesa-glx上:i386提供了/usr/lib/i386-linux-gnu/mesa/ld.so.conf(以及相关的libGL.so.1 *库。–
eurythmia

好答案。切换到Nvidia驱动程序后,我在运行Qt程序时遇到了错误- QOpenGLShaderProgram::uniformLocation( matrix ): shader program is not linked并且[xcb] This is most likely caused by a broken X extension library-然后清除了它。
Matthew阅读

谢谢。它也适用于14.04。这不会影响任何其他程序。会吗 像修复一件事会破坏另外十件事
Sudhir Khanger 2015年

51

安装Skype之后,我遇到了同样的问题...因此,您可以执行任一操作来修复此错误。

第一个是通过以下命令来运行应用程序...例如im running 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

我希望这可以解决您的libGL.so.1错误,因为它确实是我的

您也可以找到libGL.so.1

   find / -name libGL.so.1

我设法将其修复。不幸的是,我不记得是怎么回事,但是我记得它包括创建到库的随机符号链接,大量运行ldconfig,然后删除上述符号链接。现在一切正常。
p0llard

这很好!最后!另外,我还记得做这些@ jdp407之前所说的话。
GundarsMēness13年

1
尽管此解决方案不错,但一次只能处理一个应用程序。如果您还有其他任何需要libGL.so的32位应用程序,则必须为这些应用程序重复该过程。最好使用update-alternatives全局设置此首选项
eurythmia 2014年

@eurythmia您也可以在/ lib中复制它并运行sudo ldconfig,它将成为全局访问
Qasim 2014年

可悲的是,它对我在xubuntu上不起作用,“无法预加载来自LD_PRELOAD的错误:ld.so:对象'/usr/lib/i386-linux-gnu/mesa/libGL.so.1'(无法打开共享对象文件) :已忽略”;skype.conf在etc / dbus-1 / system.d中而不是/ld.so.conf.d/中,并且看起来是一个不同的文件...
dez93_2000 2014年

12

此处的修复程序将起作用,但是有一个更简单的修复程序。

如果skype不起作用但optirun skype可以起作用,那么您可以使用以下方法进行修复:

sudo apt-get install bumblebee-nvidia --reinstall

(将Bumblebee与AMD卡一起使用的人们可能需要进行等效的重新安装)。

Bumblebee既可以引起该问题,也可以解决该问题,但是当它使libGL库可用于集成卡以及功能更强大的卡时,安装时就会发生修复。如果在安装Bumblebee时尚未安装这些库,则不会发生,因此需要重新安装。尽管这样做后显然值得检查,但它也不应该影响您的Bumblebee配置。


3
对我来说效果很好...谢谢。Ubuntu gnome 14.04
2014年

1
绝对是最简单的解决方案!我知道这与安装顺序有关,因为最近我两次重新安装了系统(Ubuntu 14.04 64位+ Nvidia Optimus图形卡)。第一次安装Skype,然后安装Bumblebee,在这种情况下,我没有任何问题。第二次我第一次安装Bumblebee,然后是Skype,出现了此问题。只需按照此答案所示重新安装bumblebee-nvidia即可解决问题!
Sicco 2014年

我倾向于同意,这似乎是比我的更好的解决方案。
eurythmia

2

编辑桌面条目:

sudo nano /usr/share/applications/skype.desktop

将执行更改为:

Exec=env PULSE_LATENCY_MSEC=60 LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1 skype %U

运行:

LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1

使用启动器/桌面项启动Skype之前,先运行它。

之后,只要您使用应用程序启动器启动它,它就应该可以正常运行。


该文件libGL.so.1可能不在该路径中(在Debian 8 / Jessie上不适合我)。要查找必须放入的路径,LD_PRELOAD只需在系统上找到i386文件:sudo find / -name libGL.so.1 2>/dev/null。我发现了它,/usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1并使用它作为很好LD_PRELOAD
f.ardelian

1

我不确定这是否有助于澄清,但我在使用Skype和libGL.so.1时遇到了同样的问题。同时使用Optimus卡和大黄蜂运行13.04。

我在没有使用optirun的情况下运行skype时遇到问题,但是可以正常使用。我只是将桌面文件更改为每次都与optirun一起运行,瞧。固定!


尚未完全解决,因为您现在在Skype上使用了更多能量贪婪的卡。确实,如果您使用的是VirtualGL桥接器而不是Primus,那么实际上您将消耗尽可能多的电力,就像您没有安装大黄蜂并一直使用nvidia卡一样。
乔恩·汉纳

1

我遇到了类似的问题,并通过在64位系统上安装32位库解决了该问题: apt-get install ia32-libs


0

从官方Steam页面下载最新版本,然后让它从终端下载所需内容(如有需要)。如果您还没有,则添加大黄蜂ppa。

sudo add-apt-repository ppa:bumblebee/stable

使用以下命令更新它:

sudo apt-get update

并安装virtualgllibgl.so.1为我解决了Steam中的错误问题)

sudo apt-get install virtualgl

0

尝试:

sudo apt-get install libgl1-mesa-glx-lts-utopic:i386
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.