GCC has a "bootstrap" build process. So when you try to build gcc-11 with only gcc-8 installed, it will build a temporary "stage 1" version of gcc-11 using gcc-8, then compile gcc-11 again using gcc-11-stage1. Thus no matter what you start with, the version of gcc-11 that comes out of the build process was effectively compiled with itself.
So all that matters is that gcc-8, or whatever "system compiler" was previously installed, is able to build a stage1 version of gcc-11 that runs well enough to compile the stage 2 version. It doesn't matter whether your system compiler is good at optimizing, and gcc's source code is deliberately written to use a fairly minimal set of language feature (at least for stage 1), so you are not likely to run into trouble with your system compiler having missing or buggy support for obscure corners of the language. Historically, the "system compiler" was often not gcc at all, but some compiler provided by the computer vendor or an unrelated third party, and so one couldn't rely much on its quality; gcc was designed with that in mind.
Theoretically your system compiler could have a bug which miscompiles gcc-11-stage1 in such a way that it appears to work, but itself miscompiles stage2. This is unlikely, and it's even less likely that it would happen in a way that wasn't obvious (e.g. the stage2 compiler simply segfaulting). If worried, there's an option to have stage2 build a stage3 compiler, and then check that both versions are identical. So as long as the build completes, you can be pretty confident that the final installed compiler is fine and unaffected by bugs in the original system compiler. (All that said, a reference to Ken Thompson's "Reflections on Trusting Trust" is obligatory here.)
So in practice, you don't need to worry about the version of gcc used to build a new version. Whatever you happen to have installed already, within reason, will be fine.
Answer from Nate Eldredge on Stack OverflowI have started getting unto assembly and optimising code and I was wandering how important if at all is it to upgrade the computer I am using.
Currently I am on gcc 11.4 which feels fairly old at this point when I am looking at what's out there.
Are the differences between versions thst big or is it generally fairly unimportant
Hello, I encountered a weird warning, as stated in the title, the warning is:
... warning: the compiler differs from the one used to build the kernel The kernel was built by: x86_64-linux-gnu-gcc-11 (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 You are using: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 ...
Other info:
$ cat /proc/version Linux version 6.2.0-39-generic (buildd@lcy02-amd64-045) (x86_64-linux-gnu-gcc-11 (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #40~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 16 10:53:04 UTC 2 $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu ... gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
Can anyone help? Thanks!
My distro comes with gcc 11 and clang 14 - meanwhile the real world is on gcc 13 and clang 16.
I would like to install the newer versions of gcc and clang, but I would also like to avoid namespace collision.
(I ask about gcc and clang because I'm on r/cpp_questions but to be honest this is a problem I have for multiple languages - I also maintain python 2.7 and write python 3.newest, and other languages as well)
Are there any good solutions for this? The only think I know will work is to install separate virtual machines for separate compilers but that seems exceedingly expensive in terms of disk space.