Some programs rely on a newer version of libc6 than what's in Waldorf/Debian Stable. libc6 is, in short:
Contains the standard libraries that are used by nearly all programs on the system. This package includes shared versions of the standard C library and the standard math library, as well as many others.
The usual way to go is recompile ("backport") the program. However this only works when the source code is available (not the case with proprietary software). Often the following is suggested:
Upgrade libc6 from testing/sid (if you don't pay attention and have mixed sources, this can happen automatically). This is dangerous practice as these aren't compatible, especially when the versions are wide apart - and per the above, nearly everything on your system relies on it. Plus, as debian is a tight-woven web of dependencies it will add conflicts.
Use an older (possibly bugged) version of the program, don't use it all, or dist-upgrade to testing/sid.
A way out is LD_LIBRARY_PATH. In short you load a newer version of libc6 for the program that needs it only.
UPDATE: To complicate matters, it seems you need a specific libc6. Steam (supported on ubuntu 12.04) eg works only with libc6 2.15 from ubuntu 12.04.
Let's take a common example, Steam. You can't even install the .deb:
gdebi steam.deb Dependency is not satisfiable: libc6 (>= 2.15)
What we do is unpack the files
dpkg -X steam.deb steam && dpkg -e steam.deb steam/DEBIAN
and replace the dependency with a satisfiable one
sed -i 's/2.15/2.13/g' steam/DEBIAN/control
Then repackage it
dpkg -b steam steam-wheezy.deb
(FYI: I also remove the Valve source entries)
If you try to run it it will update but not start because of libc6 < 2.15.
version `GLIBC_2.15' not found
Let's prepare the folder for the asked version of libc6 (replace i386 with amd64 if you're on a 64bit system).
sudo -i mkdir /usr/local/ldlib && cd /usr/local/ldlib wget http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/libc6_2.15-0ubuntu10.5_i386.deb dpkg -X libc6_2.15-0ubuntu10.5_i386.deb . cp -r lib/* . && rm -r etc usr lib exit
On a 32bit system you'll have a i386-linux-gnu folder, on 64 bit x86_64-linux-gnu.
Now let's make a wrapper script.
#!/bin/bash LD_LIBRARY_PATH=/usr/local/ldlib/i386-linux-gnu:/usr/lib /usr/games/steam "$@"
make it exectuable (chmod +x) and put it eg in your ~/bin folder. You can find the path with
What this does is load the new libc6 from the ldlib folder (before the system's) for the application you specify. The "$@" means it will pass on all arguments to the original program.
(for steam you also need en_us locales)
That's it, replace steam with your favorite program that happens to need a newer libc.
Last edited by Alad (2014-05-23 22:12:28)
nice post, I have the debian-steam version which worked but this is seems to be a good workaround. I just have one question though, how does steam know to look inside the ~/bin folder for the wrapper?
Last edited by Ak_0 (2014-03-19 03:26:14)
Вкру́те и вяз перело́мишь - In affect you can break even an elm.
Всё гениальное просто. - Genius is simplicity.
Thanks for putting it together, Alad.
I just have one question though, how does steam know to look inside the ~/bin folder for the wrapper?
Files in ~/bin are the first in your PATH (check with echo $PATH); ie if you call the script "steam" and launch "steam" from somewhere, it will launch the script in ~/bin and not the actual "steam" file in /usr/bin.
I tried this with the latest opera 24, and used the jessie libc6 (2.19) deb. Everything went according to plan, up to this:
$ opera Inconsistency detected by ld.so: dl-close.c: 743: _dl_close: Assertion `map->l_init_called' failed!
So I tried it with the libc6 from ubuntu (2.15) and got this:
$ opera /usr/lib/x86_64-linux-gnu/opera-developer/opera_sandbox: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib/x86_64-linux-gnu/opera-developer/opera_sandbox)
I'm not sure what this means. Any ideas?
Last edited by alaskan-hippie (2014-07-10 05:00:45)
Unfortunately browsers are REALLY complicated. In the first post I link to a script that wraps Chrome for CentOS - you could try to adapt it for Opera. As Opera is proprietary, that's the only solution I see besides dist-upgrading.
That's what I was afraid of. I'll take a look through that script in a few hours when I have more rev in my engine. If I get it working, I'll make a new post and link to it HERE or in it's own reply so it get's people's attention.
Last edited by alaskan-hippie (2014-07-10 09:02:11)
I've installed steam with this guide and I can start it. But if I install any Games under Steam they won't start.
When I start Steam it says that libc.so.6 is missing and if I want to continue. I hit Enter and it starts. If I want to start a Game e.g. Beat Hazard following shows up:
Game update: AppID 49600 "Beat Hazard", ProcID 15735, IP 0.0.0.0:0 ERROR: ld.so: object '/home/kai/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded: ignored. /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/kai/.local/share/Steam/ubuntu12_64/gameoverlayrenderer.so) /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/kai/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libstdc++.so.6) /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/kai/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libXext.so.6) /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/kai/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu/libgcc_s.so.1) /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/kai/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libX11.so.6) /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by /home/kai/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libX11.so.6) /bin/sh: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/kai/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libxcb.so.1) Game removed: AppID 49600 "Beat Hazard", ProcID 15735
I've tried the trick with the xdg-open script but it didn't work.
The trick with the launchscript doesn't work for me.
Sadly the script doesn't work because theres no libc6_2.15-0ubuntu10.5* on the security server. Any ideas for this one? Should I take the version with 10.9? Or can I get the 10.5 version somewhere else?
Last edited by iak92 (2014-12-06 17:09:15)
For anyone interested, this can also be applied to Grim Fandango Remastered that is freshly out. I already have steam installed using the GhostSquad57 method, so I just used the "steam-debian" script as a base, and changed it to run Grim Fandango.
I have the GOG version, so I just put a script called "ld-preload.sh" (though you can call it whatever) in the root folder of the game and set it have this inside itself:
#!/bin/sh # If you use non-english locales and Steam doesn't launch, try "LC_ALL=C ./ld-preload" # Thanks to GitHub user rulet for pointing this out. LD_LIBRARY_PATH=\ /usr/lib/steam/i386-linux-gnu/\ :/usr/lib/steam/x86_64-linux-gnu/\ :/usr/lib\ :/usr/lib32\ :/usr/lib/i386-linux-gnu/nvidia/current/ ./start.sh "$@"
This should work just fine on Waldorf and any other distro based of Debian Wheezy.
I haven't played the game much yet, but it started up fine and I messed a bit with the options.
I thought it might be interesting to some people, so I added it to this thread, since I didn't think it's for a new thread.
ok so tried this today and 404 error, checked out the containing folder and it seems only 10.11 and 10.12 are available should these work? i'm guessing so but would rather check
iak92 & alaskan-hippie,
both your error messages state that the program is looking for glib 2.14, and alad's howto installs 2.15.
and it seems that debian stable uses 2.13?