Problem building older versions of gcc

Kazuyoshi Furutaka furutaka@jb3.so-net.ne.jp
Sat Jun 19 08:19:03 GMT 2021


Dear Xi Ruoyao, thanks again.

From: Xi Ruoyao <xry111@mengyan1223.wang>
Subject: Re: Problem building older versions of gcc
Date: Sat, 19 Jun 2021 15:28:16 +0800

>> 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:

I said that libstdc++.so.6 was NOT THERE WHEN cc1plus WAS BUILT,
and the newly built cc1plus should depend on the system's.


>> /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.

You pointed at the error occured, where the newly built
cc1plus was USED, and the newly built libstdc++.so.6
was used to build
  "-o x86_64-pc-linux-gnu/bits/stdc++.h.gch/O2g.gch"
or something like that.


>> 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.

What about the success of gcc-9.4.0 and gcc-8.5.0 builds?

> 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.

It may be so for the gcc-10.3.0 build, but for gcc-8.5.0 build,

> [furutaka@localhost gcc-8.5.0-bld]$ strings /lib64/libstdc++.so.6 | grep "^GLIBCXX_3.4.2" | sort | uniq
> GLIBCXX_3.4.2
> GLIBCXX_3.4.20
> GLIBCXX_3.4.21
> GLIBCXX_3.4.22
> GLIBCXX_3.4.23
> GLIBCXX_3.4.24
> GLIBCXX_3.4.25
> GLIBCXX_3.4.26
> GLIBCXX_3.4.27
> GLIBCXX_3.4.28
> [furutaka@localhost gcc-8.5.0-bld]$ strings ./stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 | grep "^GLIBCXX_3.4.2" | sort | uniq
> GLIBCXX_3.4.2
> GLIBCXX_3.4.20
> GLIBCXX_3.4.21
> GLIBCXX_3.4.22
> GLIBCXX_3.4.23
> GLIBCXX_3.4.24
> GLIBCXX_3.4.25

that is, I think the newly built library do not have
at least a few symbols that the sytem library have.
Can we think they are still compatible?

Could you be kind enought to point me to some good web
pages or books in/on which GCC's 3-stage building processes
and how the linker works?

Thanks,

Kazuyoshi
--
Kazuyoshi Furutaka
furutaka@jb3.so-net.ne.jp


More information about the Gcc-help mailing list