Re: Query on avoiding generation of issignaling@GLIBC_2.18 symbols in libgfortran.so when building GCC-12.3 from sources

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Aug 24, 2023 at 2:06 PM Jonathan Wakely via Gcc-help <
gcc-help@xxxxxxxxxxx> wrote:
>
> On Thu, 24 Aug 2023, 18:16 Shubham Srivastava via Gcc-help, <
> gcc-help@xxxxxxxxxxx> wrote:
>
> > Hi,
> >
> > When building gcc-12.3 with sources the libgfortran.so generated had
> > issignaling*@GLIBC_2.18 symbols.
> > We need to avoid these GLIBC_2.18 symbols so that our apps/products can
be
> > supported on platforms like rhel7 that doesn't support these GLIBC
symbols.
> > Is there any configuration option available that would help us avoid
> > generation of these symbols in libgfortran.so
> > Any other suggestions or thoughts on how to avoid these symbols?
> >
>
> Build on RHEL 7.


The other option that I've used is to build a cross compiler targeting the
oldest OS that you need to support.  The nice thing about this is that you
can target a very old distro without having to run that disto and deal with
ancient versions of make, openssl, unpatched security vulnerabilities, etc.

You need to:

1. Build a sysroot that contains the headers and libraries from the target
OS (CentOS7/RHEL7 in this case, if that's the oldest distro you need to
support).  You can do this by copying files from a live system or unpacking
the appropriate RPMs such as glibc, glibc-devel, glibc-headers,
kernel-headers, etc. depending on which libraries you use in your code.
Generally these files are all found in /lib[64], /usr/lib[64], and
/usr/include.

2. Build binutils from source with "--target=x86_64-linux-gnu" and
"--with-sysroot=/path/to/sysroot" options.  And probably
"--prefix=/path/to/new/cross-compiler" to place it somewhere else.

3. Build the compiler from source with similar options.  In my case I use
"--target=x86_64-linux-gnu --disable-multilib --with-gnu-lc --with-gnu-lm
--with-gnu-as --with-gnu-ld --prefix=/path/to/new/cross-compiler
--with-sysroot=/path/to/sysroot --enable-languates=c,c++"
You'll have to change the languages to add fortran, and likely don't need
the "--with-gnu..." options which I had because sometimes my target isn't
Linux/GNU stuff.

4. When building the software, invoke the cross compiler instead and it
should Just Work.  My own setup passes "--sysroot=/path/to/sysroot" to gcc,
g++ and ld but I suspect that is not required if the sysroot is in the same
path during compilation as it was when building gcc itself.




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux