Hello, I'm noticing some issues with libstdc++ after building GCC from
sources and installing into /opt/gcc-14.1.0. Specifically:
$ objdump -x /opt/gcc-14.1.0/lib/libstdc++.so.6 | grep RUNPATH
$ ldd /opt/gcc-14.1.0/lib/libstdc++.so.6
/opt/gcc-14.1.0/lib/libstdc++.so.6:
libm.so.5 => /lib/libm.so.5 (0x5486f1dc8000)
libc.so.7 => /lib/libc.so.7 (0x5486f07e5000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x5486f1ff0000)
As you can see libstdc++ depends on libgcc_s but libstdc++ is missing
RUNPATH, so it picks up whatever is found in /lib rather than in target
install directory /opt/gcc-14.1.0
Contrast this with:
$ objdump -x /opt/gcc-14.1.0/lib/libcc1.so.0 | grep RUNPATH
RUNPATH /opt/gcc-14.1.0/lib
$ ldd /opt/gcc-14.1.0/lib/libcc1.so.0
/opt/gcc-14.1.0/lib/libcc1.so.0:
libstdc++.so.6 => /opt/gcc-14.1.0/lib/libstdc++.so.6 (0x59c328800000)
libm.so.5 => /lib/libm.so.5 (0x59c325081000)
libc.so.7 => /lib/libc.so.7 (0x59c3245c4000)
libgcc_s.so.1 => /opt/gcc-14.1.0/lib/libgcc_s.so.1 (0x59c326ac0000)
Is it intentional or is it a bug? What is the best way to add RUNPATH
to libstd++? Do I modify CFLAGS_FOR_TARGET or LDFLAGS_FOR_TARGET?
PS. GCC was configured with these options:
$ /opt/gcc-14.1.0/bin/gcc -v
Using built-in specs.
COLLECT_GCC=/opt/gcc-14.1.0/bin/gcc
COLLECT_LTO_WRAPPER=/opt/gcc-14.1.0/libexec/gcc/aarch64-unknown-freebsd14.0/14.1.0/lto-wrapper
Target: aarch64-unknown-freebsd14.0
Configured with: ../../src/gcc-14.1.0/configure --prefix=/opt/gcc-14.1.0
--build=aarch64-unknown-freebsd14.0 --host=aarch64-unknown-freebsd14.0
--target=aarch64-unknown-freebsd14.0 --enable-languages=c,c++,ada
--enable-shared --enable-threads=posix --enable-bootstrap --disable-multilib
--disable-nls --with-as=/opt/gcc-14.1.0/bin/as --with-ld=/opt/gcc-14.1.0/bin/ld
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 14.1.0 (GCC)