[nSLUG] Help? libstdc++ question/confusion
George N. White III
gnwiii at gmail.com
Wed Jan 14 12:50:07 AST 2009
On Wed, Jan 14, 2009 at 2:52 AM, Mike Spencer <mspencer at tallships.ca> wrote:
> Summary: App works with config/libs on 2.4 kernel. Fails with 2.6
> kernel. Problem with libstdc++-libc6.1-1.so.2 apparently
> hard-coded in a program.
There are changes to the internals of glib and libstdc++, so you either
recompile or use compatibility libraries. It has been a while since I
built those libraries, but think there was an option to include support
for older versions when making a current libc and libstdc++. Our
mission critical stuff is on RHEL, who have the compat libraries
as optional installs, but I recall reading complaints that Ubuntu
There may also be some older code that runs afoul of "security"
patches in current versions. For some legacy apps I had to
build libraries with the patches reversed to use until the program's
authors made the required changes.
In extreme cases, people resort to running the older kernal in a
> I'm trying to run a rather old app  on a Slackware 12.1 install with
> 2.6 kernel. I get:
> Error while loading shared libraries: libstdc++-libc6.1-1.so.2
> No such file or directory
> Sure enough, that lib doesn't exist in the new install on nudel.
> Okay, I look on my working machine (named bogus, Slak 10.1, 2.4
> kernel) and find:
> bogus% cd /usr/i486-slackware-linux/lib/
> bogus% ls -l libstdc++-libc6.1-1.so.2
> libstdc++-libc6.1-1.so.2 -> libstdc++-2-libc6.1-1-2.9.0.so
> bogus% ls -l libstdc++-2-libc6.1-1-2.9.0.so
> So I copy the real lib over to the same dir on the new box (nudel),
> create the corresponding symlink:
> nudel-root$ mount bogus:/
> nudel-root$ pwd
> nudel-root$ cp \
> /mnt/bogus/usr/i486-slackware-linux/lib/libstdc++-2-libc6.1-1-2.9.0.so .
> nudel-root$ ln -s libstdc++-2-libc6.1-1-2.9.0.so libstdc++-libc6.1-1.so.2
> and now the app in question segfaults.
Yes, because the underlying interfaces have changed. It may help to
use straces and/or gdb to indetify the call that fails -- you can see if the
change is covered in a compatibility library or was judged insecure, in
which case there may not be an easy fix.
> If I remove the symlink and recreate it pointing at either of the
> newer lib versions, libstdc++-3-libc6*, it also segfaults.
> What can I do to fix this?
> Why does it all worn on bogus but not on nudel?
> (Yes, I ran ldconfig on nudel after each change and
> /usr/i486-slackware-linux/lib is listed in /etc/ld.so.conf.)
> I find this lib management stuff way more confusing than writing or
> even debugging C code. I don't even know where to look for a lucid
> description of what the various libc* libraries do, how they differ,
> how they're systematically (?!) named and why there are so many that
> are just symlinks. So I haven't doggedly documented, listed and
> researched this in tedious detail because I don't really know where to
Use the sources for the libraries.
> Really hoping for a helpful clue here.
I just learned about bashian roulette:
bash-3.1# (($RANDOM%6)) || echo 'Oops!'
where "echo 'Oops!'" is often replaced by "rm -rf /"
1 in 6 chance your library problems will suddenly seem
George N. White III <aa056 at chebucto.ns.ca>
Head of St. Margarets Bay, Nova Scotia
More information about the nSLUG