Technote (troubleshooting)
Problem(Abstract)
This article describes a possible problem on a Linux distribution with a kernel version of 2.6 depending on the version of library libstdc++
Symptom
The oninit executable can at startup return an error on some Linux distributions like Redhat Entreprise Server 4 x86_64 ( Kernel 2.6.9-34.0.2.ELsmp #1 SMP) with IBM® Informix® Dynamic Server™ 10.00.FC4 and 10.00.FC5
Example
$ oninit
oninit: /lib64/libstdc++.so.5: version `CXXABI_1.2' not found (required by oninit)
On some Linux distributions, libstdc++.so.5 does not exist or is linked with
/usr/lib64/libstdc++.so.6.0.3 like libstdc++.so.6. On Redhat Linux
Entreprise Server x86_64 the rpm package installed is
libstdc++-3.4.5-2.x86_64.rpm (64bits package) and
compat-libstdc++-33-3.2.3-47.3 (32bits package) and the following files are installed:
$ rpm -ql libstdc++
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.3
/usr/lib/libstdc++.so.6
/usr/lib/libstdc++.so.6.0.3
/usr/lib/libstdc++.so.5
/usr/lib/libstdc++.so.5.0.7
Cause
Check the strings CXXABI in /usr/lib64/libstdc++.so.6.0.3:
$ ls -l /usr/lib64/libstdc++.so.6.0.3
-rwxr-xr-x 1 root root 910744 Dec 20 2005 /usr/lib64/libstdc++.so.6.0.3
$ strings /usr/lib64/libstdc++.so.6.0.3 | grep CXXABI
CXXABI_1.3
Version for this library is CXXABI_1.3 instead of CXXABI_1.2, so oninit will not start.
Resolving the problem
1. Find the correct package.
It is mandatory to install the 64bits rpm package libstdc++ including CXXABI_1.2. Connect tohttp://rpm.pbone.net to get the lastest release including CXXABI_1.2.
Example
Name : libstdc++
Version : 3.3.4 Vendor : SuSE Linux AG, Nuernberg, Germany
Release : 11 Date : 2004-10-02 02:51:27
Group : System/Libraries Source RPM : gcc-3.3.4-11.src.rpm
Size : 2044198
Packager : www_suse_de
Summary : The standard C++ shared library
Description :
The standard C++ library, needed for dynamically linked C++ programs.
Provides :
gppshare
libstdc++.so.5
libstdc++.so.5()(64bit)
libstdc++.so.5(CXXABI_1.2)
libstdc++.so.5(CXXABI_1.2)(64bit)
libstdc++.so.5(CXXABI_1.2.1)
libstdc++.so.5(CXXABI_1.2.1)(64bit)
libstdc++.so.5(CXXABI_1.2.2)
libstdc++.so.5(CXXABI_1.2.2)(64bit)
libstdc++.so.5(GLIBCPP_3.2)
libstdc++.so.5(GLIBCPP_3.2)(64bit)
libstdc++.so.5(GLIBCPP_3.2.1)
libstdc++.so.5(GLIBCPP_3.2.1)(64bit)
libstdc++.so.5(GLIBCPP_3.2.2)
libstdc++.so.5(GLIBCPP_3.2.2)(64bit)
libstdc++.so.5(GLIBCPP_3.2.3)
libstdc++.so.5(GLIBCPP_3.2.3)(64bit)
libstdc++.so.5(GLIBCPP_3.2.4)
libstdc++.so.5(GLIBCPP_3.2.4)(64bit)
libstdc++.so.5(libstdc++.so.5)
libstdc++.so.5(libstdc++.so.5)(64bit)
libstdc++
2. Install the rpm
Example
$ rpm --install --force libstdc++-3.3.4-11.x86_64.rpm
warning: libstdc++-3.3.4-11.x86_64.rpm: V3 DSA signature: NOKEY, key ID 9c800aca
3. Check for the library /usr/lib64/libstdc++.so.5
Example
$ rpm -ql libstdc++
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.3
/usr/lib/libstdc++.so.6
/usr/lib/libstdc++.so.6.0.3
/usr/lib/libstdc++.so.5
/usr/lib/libstdc++.so.5.0.7
/usr/lib64/libstdc++.so.5
/usr/lib64/libstdc++.so.5.0.7
/usr/share/locale/de/LC_MESSAGES/libstdc++.mo
/usr/share/locale/fr/LC_MESSAGES/libstdc++.mo
$ strings /usr/lib64/libstdc++.so.5 | grep CXXABI
CXXABI_1.2
CXXABI_1.2.1
CXXABI_1.2.2
4. Create a symbolic link /lib64/libstdc++.so.5
Example
$ ln -s /usr/lib64/libstdc++.so.5 /lib64/libstdc++.so.5
Rate this page:
Copyright and trademark information
IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.