50

When attempting to run various pieces of software (notably Steam and Yenka), I have come across an error similar to this: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

I'm running a 64 bit system, with an NVidia Optimus card (I dual boot for certain windows only software that requires a dedicated graphics card). I have bumblebee installed, and I am using the nvidia-current driver, rather that one downloaded from NVidia, as recommended.

The library (libGL.so.1) is not present in the top directory of /usr/lib, however it is present in /usr/lib32/nvidia-current, as a softlink to /usr/lib32/nvidia-current/libGL.so.304.64.

A section of the output from 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

Obviously a library with that name is being loaded, but they are located in /usr/lib/x86_64-linux-gnu, however installed software doesn't seem to able to 'see' it. For Steam, running it with optirun causes it to work, but this is not the case for Yenka. I assume that optirun causes the library stored in /usr/lib32/nvidia-current to be used, which allows Steam to run, so I can't understant why Yenka won't run.

Can anyone explain why software can't see the normal mesa library, and why Yenka refuses to run with the nvidia-current library?

8 Answers 8

52

I am having the same issue after installing skype ...so you can do either thing to fix this error..

1st one is run the application by following command ...for example i m running skype..

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

S O U R C E

2nd that what i did

sudo nano /etc/ld.so.conf.d/skype.conf

and add the following line in it

/usr/lib/i386-linux-gnu/mesa/

save & exit

and lastly run

sudo ldconfig -v

i hope this will fix your libGL.so.1 error as it did mine

You can also find libGL.so.1

   find / -name libGL.so.1
8
  • I managed to fix it in the end. Unfortunately, I can't remember how, but I remember it consisted of creating random symlinks to the library, running ldconfig a lot, and then removing the aforementioned symlinks. Everything works fine now.
    – user58203
    Mar 21, 2013 at 20:56
  • This worked fine! Finally! Also, I remember doing what @jdp407 said before these steps. Aug 18, 2013 at 9:53
  • 1
    While this solution is good, it only ever handles applications one at a time. If you have any other 32 bit applications that require a libGL.so, then you will have to repeat the process for those applications. It's best to set this preference globally using update-alternatives
    – Ch4ni
    Apr 29, 2014 at 12:04
  • @eurythmia You can also copy it in /lib and run sudo ldconfig and it will be global access
    – Qasim
    Apr 29, 2014 at 12:07
  • sadly doesn't work for me on xubuntu, "ERROR: ld.so: object '/usr/lib/i386-linux-gnu/mesa/libGL.so.1' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored"; skype.conf is in etc/dbus-1/system.d not /ld.so.conf.d/ and looks to be a different file...
    – dez93_2000
    Oct 15, 2014 at 13:04
39

With the nvidia drivers installed skype is looking for an i386 lib provided by the nvidia package. Since that doesn't exist, it is ok to use the i386 libGL.so.1 provided by mesa.

Tested on (ubuntu-gnome raring, using nvidia-325) and (ubuntu-gnome saucy, using nvidia-319) we were able to fix this by the following:

update-alternatives --display i386-linux-gnu_gl_conf

This will show you what the available options are.

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'

so, do the following:

sudo update-alternatives --config i386-linux-gnu_gl_conf

then select the best alternative (I selected i386-linux-gnu/mesa/ld.so.conf): In the output below there are two choices for the alternative i386-linux-gnu_gl_conf (providing /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

After you have completed that, try running:

sudo ldconfig

and then you're done.

6
  • 2
    I had the exact same and this worked perfectly, thanks very much (Ubuntu 13.10) Oct 4, 2013 at 19:33
  • annoying - I only have the ld.so.conf option, so get "There is only one alternative in link group i386-linux-gnu_gl_conf (providing /etc/ld.so.conf.d/i386-linux-gnu_GL.conf): /usr/lib/i386-linux-gnu/mesa/ld.so.conf. Nothing to configure."
    – dez93_2000
    Oct 15, 2014 at 13:01
  • which nvidia packages do you have installed? Do you have libgl1-mesa-glx installed? On trusty libgl1-mesa-glx:i386 provides /usr/lib/i386-linux-gnu/mesa/ld.so.conf (and the assocaited libGL.so.1* libraries.
    – Ch4ni
    Oct 20, 2014 at 17:45
  • Great answer. I was getting errors running a Qt program after switching to the Nvidia driver -- QOpenGLShaderProgram::uniformLocation( matrix ): shader program is not linked and [xcb] This is most likely caused by a broken X extension library -- and following this cleared it up. Apr 10, 2015 at 16:45
  • Thanks. It works on 14.04 too. This isn't going to affect any other program. Will it? Like fixing one thing breaks 10 other. May 7, 2015 at 8:52
12

The fixes here will work, but there's a simpler one.

If skype doesn't work but optirun skype does work, then you can fix it with:

sudo apt-get install bumblebee-nvidia --reinstall

(People using Bumblebee with AMD cards may need to do the equivalent re-installation).

Bumblebee both causes and fixes this problem, but the fix it applies happens upon installation, when it makes the libGL libraries available to the integrated card as well as the more powerful card. This won't happen if those libraries weren't already installed when you installed Bumblebee, hence needing a re-installation. It shouldn't affect your bumblebee configuration either, though it's obviously worth checking after you've done this.

3
  • 3
    it works well for me...thanks. Ubuntu gnome 14.04
    – aditia
    May 5, 2014 at 6:21
  • 1
    Definitely the easiest solution! I knew it had something to do with the installation order as I reinstalled my system twice recently (Ubuntu 14.04 64bit + Nvidia Optimus graphics card). The first time I first installed Skype and then Bumblebee, in which case I had no problems. The second time I first installed Bumblebee and then Skype and this problem arose. Simply reinstalling bumblebee-nvidia as shown in this answer solved the problem!
    – Sicco
    Aug 27, 2014 at 21:38
  • I am inclined to agree that this seems like a better solution than mine.
    – Ch4ni
    Aug 16, 2015 at 23:11
3

Edit the desktop entry:

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

Change the Exec to:

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

This runs:

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

before running skype when you start it with the launcher / desktop entry.

It should run fine after that as long as you start it using the application launcher.

1
  • The file libGL.so.1 may not be in that path (it wasn't for me, on Debian 8/Jessie). To find the path which you must put in LD_PRELOAD simply find the i386 file on your system: sudo find / -name libGL.so.1 2>/dev/null. I found it in /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1 and it worked fine using that as LD_PRELOAD.
    – f.ardelian
    Feb 15, 2015 at 4:39
1

I'm not sure if this'll help clarify or not but I had the same issue with skype and libGL.so.1. Also running 13.04 with an optimus card and bumblebee.

I got the issue running skype without optirun, but it worked fine with. I just changed the desktop file to run with optirun every time and voila. fixed!

1
  • Not really fixed, since you're now using the more energy-greedy card for skype. Indeed, if you're using the VirtualGL bridge rather than primus, you're essentially going to burn as much power as if you didn't have bumblebee installed and just used the nvidia card all the time.
    – Jon Hanna
    May 6, 2014 at 9:51
1

I had a similar problem and solved it by installing 32bit libs on my 64bit system: apt-get install ia32-libs

0

Download the latest version from the official steam page, than let it download what it needs from the terminal(if any needs). than add bumblebee ppa if you did not already.

sudo add-apt-repository ppa:bumblebee/stable

update it with this command:

sudo apt-get update

and install virtualgl(that solved the libgl.so.1 error stuff for me in Steam)

sudo apt-get install virtualgl
0

Try:

sudo apt-get install libgl1-mesa-glx-lts-utopic:i386

You must log in to answer this question.