FreeCAD 0.17 && /lib//libgcc_s.so.1

Eugene Grosbein eugen at grosbein.net
Sun Feb 17 06:13:32 UTC 2019


17.02.2019 12:56, Steve Kargl wrote:

> On Sun, Feb 17, 2019 at 12:37:36PM +0700, Eugene Grosbein wrote:
>> 17.02.2019 12:11, Steve Kargl wrot:
>>
>>>
>>> There is a problem with the order of libgcc_s.so.1
>>> in the cache created by ldconfig.  rtld will use
>>> the first one it finds.  If it fails, it fails.  It
>>> does not look to see if there is a second entry.
>>
>> If binary needs specific version of libgcc_s.so.1 installed
>> with gcc8 port/package, then building system must use specific
>> rpath, so rtld would not use "the first one it finds".
> 
> This is a well-known problem with libgcc_s.so.1 and gfortran.
> You can state whatever you believe should happen, but it does
> not seem to work that.  You have a few options:
> 1) Add -static to your options;
> 2) Use LD_LIBRARY_PATH, LD_RUN_PATH to point to
>    /usr/local/lib/gcc8;
> 3) Add -Wl,-rpath=/usr/local/lib/gcc8 to FFLAGS in /etc/make.conf
>    (check syntax for this one);
> 4) bump the major library version number for /lib/libgcc.so.1
>    to 2;
> 5) fix rtld to not fail on the first found library in the cache.
>    Iterated over all entries and only fail if the library isn't found;
> 6) rename /lib/libgcc_s.so.1 to /lib/libllvm_s.so.1 and teach
>    llvm/clang/rtld to not misappropriate a well-known GCC library
>    name.
> 

When a port from our Ports Collection needs specific version of GCC and its runtime libraries,
it utilizes "USE_GCC=8" and bsd.gcc.mk adds this to make everybody happy:

CFLAGS+=                -Wl,-rpath=${_GCC_RUNTIME}
CXXFLAGS+=              -Wl,-rpath=${_GCC_RUNTIME}
LDFLAGS+=               -Wl,-rpath=${_GCC_RUNTIME} -L${_GCC_RUNTIME}

This is your 3) case and this is what I have meant.

When someone builds a binary having same requirements but without
writing port/using bsd.gcc.mk, same needs to be done
and everything should just work. Or better create a port.



More information about the freebsd-ports mailing list