Red Hat Bugzilla – Bug 154277
Incorrect library path links static libstdc++ in user shared libraries
Last modified: 2007-11-30 17:07:17 EST
Description of problem:
When building shared libraries, g++ uses an incorrect library path which leads
to linking libstdc++.a to a user shared library.
Version-Release number of selected component (if applicable):
$ gcc -v
Reading specs from
Configured with: ../gcc-src/configure
--enable-threads=posix --disable-checking --with-system-zlib
--enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++
Thread model: posix
gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
Steps to Reproduce:
$ cat > t.cpp << EOF
$ g++ -c -fPIC t.cpp && g++ -shared -o libt.so t.o
R_X86_64_32 against `std::ios_base::Init::_S_refcount' can not be used when
making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/libstdc++.a: could not read symbols: Bad
collect2: ld returned 1 exit status
The verbose output of the linking command shows the lib paths, of which of
The first one contains the libstdc++.a against which it tries to link.
This is clearly your self-build GCC, not the one provided in RHEL4.
The packaged gcc-c++ certainly provides libstdc++.so symlink in the same path
as libstdc++.a and therefore the linker picks that up first, your testcase
compiles on RHEL4 just fine. But for self-build GCC you are on your own
to make sure it is properly installed.
rpm -qf /usr/lib/gcc/x86_64-redhat-linux/3.4.3/libstdc++.so
Yes indeed, the compiler was built from sources coming from RedHat. We cannot
afford to replace the compiler in /usr/bin thus we built the compiler ourselves
and place it in a special location.
I would like to know what is the RedHat recommended way of building the compiler
from the sources which RedHat recommends. If our sysadmins are doing something
wrong in the way they are installing the compiler, that needs to be corrected.
I need to mention here that we built the 3.4.3 from GNU's repository and it
works just fine w/ the same test case on EL4.
If us building the compiler from your sources is not supported please let us
know so that we can pursue other avenues.