ID #1177

Failed dependency for libstdc++.so.5 error


This error occurs because a C++ shared library that SJA requires is not available. It is not on some recent Linux distributions ('recent' as of late summer 2010). With version 8.62 we have changed the 'packaging' of SJA for Linux and what code SJA requires now comes with it. So if you encounter this problem you should upgrade SJA to latest version.


Below you will find the text of this FAQ before the above lines were added. It only applies if you use an older SJA version (and you should expect it to be removed soon).

When writing applications supposed to run on more different Linux versions there are various ways to handle this. The solution that we use in SJA is to link against older versions, so that SJA will run on any Linux version from when this C/C++ version was first introduced and up. Since version 8.13 we link 'dynamically' what means that the C++ shared library code that SJA needs is not compiled into SJA itself. SJA will need to find the code on the system where it runs. The shared library file is "libstdc++.so.5" what is part of the GCC 3.2 runtime (introduced with RedHat 9 and other Linux distributions released at about the same time).

With very recent Linux distributions (based on GCC 4.x runtimes) you may not have this shared library installed.  With some distro's it is an optional install.  To install just use whatever package manager system is available with your distribution.  For instance:


* On Red Hat Enterprise and Fedora, the command to install the compatibility package is: "yum install compat-libstdc++-33"
* On Ubuntu the command to install the compatibility package is: "sudo apt-get install libstdc++5"
* On SuSE you may use the Yast 'Software Management' GUI and find the package by searching with 'libstdc'. The packet required is named "compat-libstdc++" (and the RPM file is named compat-libstdc++-5.0.7-121.1.i586.rpm on 32 bit systems). To install from a console on SuSE do (as root) "yast -i compat-libstdc++"

Before version 8.13 SJA the 'libstdc++.so.5' library was linked statically (ie: SJA itself included the code).  But as Linux now has been available for production use for around 10 years it is not possible anymore to link statically and ensure that it will work with all - old as well as recent - distro's available. Specifically we changed this with 8.13 because before SJA would sometimes fail with very recent distributions (Ubuntu was affected).

Also note that SJA is available as a 32 bit binary only.  There is no need for providing a 64 bit binary as SJA will never use more memory than what can be addressed by a 32 bit binary.  However as a consequence you will have to have 32-bit compability installed.  This is not a problem with pre-compiled and pre-packaged distributions - only if you build the OS yourself or if you use a installation method with very selective installation options (like some network installation methods available) 32 bit compability packages must be included.

Should you for some reason need a SJA compiled on or for some specific distro or should you need a 64 bit binary please contact us. We will try if there is a good reason!


Tags: -

Related entries:

You can comment this FAQ