On Fri, Aug 19, 2016 at 09:50:28PM +0200, Tijl Coosemans wrote: > On Fri, 19 Aug 2016 10:28:14 +0300 Konstantin Belousov <kostik...@gmail.com> > wrote: > > The option which would fix all this mess is: > > 1. add rpath for gcc lib/ directory into spec file > > and > > 2. make ports collection use its own compiler instead of fighting with > > the base. > > That still doesn't cover all cases, e.g.: > > port exec -> base lib -> libgcc_s.so.1 > -> port lib -> recent libgcc_s.so.1 > > An example is: > > % echo 'int main(void){}' > test.c > % clang37 -o test test.c -lexecinfo -lgfortran -L/usr/local/lib/gcc5 > -Wl,-rpath,/usr/local/lib/gcc5 > % ./test > /lib/libgcc_s.so.1: version GCC_4.6.0 required by > /usr/local/lib/gcc5/libgfortran.so.3 not found > > The base library (libexecinfo) doesn't have DT_RPATH or DT_RUNPATH so the > only way rtld can find the right libgcc_s.so is if the executable (test) > has DT_RPATH and no DT_RUNPATH. Clang runs ld with --enable-new-dtags > so the executable has DT_RUNPATH. DT_RPATH is deprecated in the Linux > world so there are probably more ports that use --enable-new-dtags. > Another example seems to be Rust.
Indeed, and I rechecked the find_library() code against the latest gABI once more. So base libraries linked against libgcc_s are /lib/libcxxrt.so.1 /usr/lib/libc++.so.1 /usr/lib/libexecinfo.so.1 /usr/lib/libprivatedevdctl.so.0 and only libexecinfo would be somewhat problematic. libcxxrt and libc++ come from C++ runtime, which must be provided by the port's compiler, the private library should not be linked to by behaving applications. I suppose that libexecinfo pull unwinder from libgcc_s. It might be possible just dlopen() libgcc_s for _Unwind_Backtrace, it seems. _______________________________________________ freebsd-ports@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-ports To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"