Problem building older versions of gcc

Xi Ruoyao xry111@mengyan1223.wang
Sat Jun 19 07:28:16 GMT 2021


On Sat, 2021-06-19 at 16:12 +0900, Kazuyoshi Furutaka via Gcc-help
wrote:
> Dear Xi Ruoyao, thanks for your suggestion.
> 
> From: Xi Ruoyao <xry111@mengyan1223.wang>
> Subject: Re: Problem building older versions of gcc
> Date: Sat, 19 Jun 2021 12:26:38 +0800
> 
> > On Fedora 33 there should be the same problem.  But Fedora 33 may have
> > a
> > same libstdc++.so.6 version with gcc-10.x, so the newly built library
> > is
> > compatible completely with the system one and no issue is observed.
> 
> In the Fedora-33 testing system on QEMU/KVM (with gcc-10.3.1 installed),
> I've also tried the builds of gcc-9.4.0 and gcc-8.5.0, and the builds
> ended
> successfully. (by the way, the versions of libstdc++ are the same,
> 6.0.29,
> on both testing Fedora-33 and Fedora-34 systems)
> 
> 
> From: Xi Ruoyao <xry111@mengyan1223.wang>
> Subject: Re: Problem building older versions of gcc
> Date: Sat, 19 Jun 2021 12:29:19 +0800
> 
> > On Sat, 2021-06-19 at 12:26 +0800, Xi Ruoyao via Gcc-help wrote:
> > 
> > > Anyway, GCC executables should not link to libstdc++.so.6.  Is
> > > libstdc++.a installed on your Fedora 34?  Note that Fedora
> > > maintainers
> > > may split it into a seperate package.
> > 
> > A quick search confirmed my guess:
> > 
> > https://fedora.pkgs.org/34/fedora-x86_64/libstdc++-static-11.0.1-0.3.fc34.x86_64.rpm.html
> 
> I'm sorry but what are your points?
> 
> Indeed, as I mentioned in the previous post, in Fedora there's
> a separate package for static libstdc++ library, and as I wrote,
> only after installing it, the build with simple (--prefix only)
> configuration succeeded on a Fedora-34 system.
> 
> And, the cc1plus installed in Fedora-34 does not depend on
> the system's libstdc++:
> 
> > [furutaka@peart-furu-or-jp gcc]$ rpm -ql gcc-c++|grep cc1plus
> > /usr/libexec/gcc/x86_64-redhat-linux/11/cc1plus
> > [furutaka@peart-furu-or-jp gcc]$ ldd /usr/libexec/gcc/x86_64-redhat-
> > linux/11/cc1plus
> >        linux-vdso.so.1 (0x00007ffd00acc000)
> >        libdl.so.2 => /lib64/libdl.so.2 (0x0000153c91528000)
> >        libmpc.so.3 => /lib64/libmpc.so.3 (0x0000153c91508000)
> >        libmpfr.so.6 => /lib64/libmpfr.so.6 (0x0000153c91458000)
> >        libgmp.so.10 => /lib64/libgmp.so.10 (0x0000153c913b0000)
> >        libz.so.1 => /lib64/libz.so.1 (0x0000153c91390000)
> >        libzstd.so.1 => /lib64/libzstd.so.1 (0x0000153c91298000)
> >        libm.so.6 => /lib64/libm.so.6 (0x0000153c91150000)
> >        libc.so.6 => /lib64/libc.so.6 (0x0000153c90f80000)
> >        /lib64/ld-linux-x86-64.so.2 (0x0000153c91568000)
> >        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000153c90f58000)
> 
> On the other hand, the stage-1 cc1plus is built in advance
> to libstdc++.so, and therefore I think it's inevitable that
> the stage-1 cc1plus depends on the system's libstdc++.so
> (or else the stage-1 cc1plus should be statically linked).
> 
> So...
> 
> > I think gcc building system is setting LD_LIBRARY_PATH somewhere.  So
> > during building process the newly built libstdc++.so.6 is found,
> > instead
> > of the system library.


> I think that the newly built stage-1 cc1plus CAN NOT use
> for itself the new libstdc++.so.6 because it does NOT exist.

>From your log, it can be seen it's already built:

> /home/furutaka/work/gcc/gcc-10.3.0-bld/./gcc/cc1plus:
> /home/furutaka/work/gcc/gcc-10.3.0-bld/x86_64-pc-linux-gnu/libstdc++-
v3/src/.libs/libstdc++.so.6:
> version `GLIBCXX_3.4.29' not found (required by
> /home/furutaka/work/gcc/gcc-10.3.0-bld/./gcc/cc1plus)

x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 is there.

> By the way, LD_LIbRARY_PATH is not defined on both F33 & F34 systems.

It's not F33 or F34 sets LD_LIBRARY_PATH, it's GCC building system
setting it.

> So, I'm still wondering the cause of the differences between
> the two systems.

Fedora 33 is using GCC 10, which matches the GCC version you are
building.

When libstdc++.a is not installed, stage 1 cc1plus etc. links to system
libstdc++.so.

GCC building system (automatically) sets LD_LIBRARY_PATH to contain
newly built runtime libraries.  So a newly built libstdc++.so is found
anyway.

On Fedora 33 system the libstdc++.so built in stage 1 is compatible with
system one.  On Fedora 34 it's not.
-- 
Xi Ruoyao <xry111@mengyan1223.wang>
School of Aerospace Science and Technology, Xidian University



More information about the Gcc-help mailing list