Re: gcc and base system disagree on version of __unordtf2 in libgcc_s

From: Mark Millard <marklmi_at_yahoo.com>
Date: Wed, 24 Jan 2024 21:24:23 UTC
On Jan 24, 2024, at 12:24, John F Carr <jfc@mit.edu> wrote:

> If I build a C++ program with g++ on 64 bit ARM and do not use -Wl,-rpath
> the resulting executable fails with
> 
> ld-elf.so.1: /lib/libgcc_s.so.1: version GCC_4.5.0 required by /usr/local/lib/gcc11/libstdc++.so.6 not found
> 
> The symbol exists but has the wrong version.
> 
> FreeBSD's /lib/libgcc_s.so.1 defines __unordtf2 in version GCC_4.6.0.
> 
> gcc's libgcc_s.so defines __unordtf2 in version GCC_4.5.0.
> 
> Who is right?  Can we make the gcc port and base system agree?
> Can we do it without breaking old executables?
> 
> In the gcc source a comment in libgcc/config/i386/libgcc-bsd.ver reads:
> 
> # 128 bit long double support was introduced with GCC 4.6.0 for FreeBSD.
> # These lines make the symbols to get a @@GCC_4.6.0.
> 
> Reproduced with gcc11, gcc12, and gcc13-devel packages on FreeBSD 14 and 15.

An old note from an old bugzilla:

QUOTE
An interesting point is amd64 vs. aarch64 for
/usr/local/lib/gcc11/libgcc_s.so.1 :

+GCC_4.6.0 __unordtf2
vs.
+GCC_4.5.0 __unordtf2

So the GCC_* vintage is architecture specific.
END QUOTE


===
Mark Millard
marklmi at yahoo.com