[Bug other/32415] libgcc_s not found in library search path with --enable-version-specific-runtime-libs

bruno at clisp dot org gcc-bugzilla@gcc.gnu.org
Thu Jan 5 00:22:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32415

bruno at clisp dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bruno at clisp dot org

--- Comment #14 from bruno at clisp dot org ---
I'm seeing this also, with gcc 4.9.0. Configured on x86_64 Linux with
../gcc-4.9.0/configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu
--target=x86_64-pc-linux-gnu --prefix=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--enable-shared --enable-version-specific-runtime-libs --enable-nls
--enable-threads=posix --enable-__cxa_atexit
--with-as=/arch/x86_64-linux-gnu/gnu/bin/as
--with-gmp=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--with-mpfr=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--with-mpc=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--with-libelf=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--with-isl=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--with-cloog=/arch/x86_64-linux-gnu/gnu-inst-gcc/4.9.0
--with-ecj-jar=/downloads/sourceware.org-ecj/ecj-latest.jar

The build with --enable-version-specific-runtime-libs fails to find libgcc_s
when linking programs. The build without this option works fine.

Analyzing the difference:

* Location of installed libraries other than libgcc_s:
Most 32-bit libraries get installed in
  - PREFIX/lib32 for the working build,
  - PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/32 for the build with
--enable-version-specific-runtime-libs.
Most 64-bit libraries get installed in
  - PREFIX/lib64 for the working build,
  - PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0 for the build with
--enable-version-specific-runtime-libs.

* Location of installed libgcc_s (.so symlink and .so.1):
32-bit libgcc_s gets installed in
  - PREFIX/lib32 for the working build,
  - PREFIX/lib/gcc/x86_64-pc-linux-gnu/lib32 for the build with
--enable-version-specific-runtime-libs.
64-bit libgcc_s gets installed in
  - PREFIX/lib64 for the working build,
  - PREFIX/lib/gcc/x86_64-pc-linux-gnu/lib64 for the build with
--enable-version-specific-runtime-libs.

* The library path (set of -L options) that collect2 passes to ld, however, is
the same in both cases (without and with
--enable-version-specific-runtime-libs). Namely:

When creating 32-bit binaries:
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/32
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/../../../../lib32
/lib/i386-linux-gnu
/lib/../lib32
/usr/lib/i386-linux-gnu
/usr/lib/../lib32
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0
PREFIX/lib/gcc
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/../../..
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu

When creating 64-bit binaries:
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0
PREFIX/lib/gcc
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/../../../../lib64
/lib/x86_64-linux-gnu
/lib/../lib64
/usr/lib/x86_64-linux-gnu
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/../../..

This library path contains the location of all installed libraries except
libgcc_s.

Conclusion:

So it looks really like a bug in the installation rules for libgcc_s.
- The 32-bit libgcc_s ought to be installed in
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0/32, not
PREFIX/lib/gcc/x86_64-pc-linux-gnu/lib32.
- The 64-bit libgcc_s ought to be installed in
PREFIX/lib/gcc/x86_64-pc-linux-gnu/4.9.0, not
PREFIX/lib/gcc/x86_64-pc-linux-gnu/lib64.


More information about the Gcc-bugs mailing list