我必须编译3个版本的gcc,比如9、10和11。我的系统gcc是8版本(比方说)。
问:我在用gcc-v8编译gcc-v9、用gcc-v9编译gcc-10和用gcc-v10编译gcc-v11方面有什么优势吗?
或者我没有任何优势,我可以编译所有的gcc-v8?
谢谢你指出了一些进一步研究的方向。
发布于 2022-07-01 16:17:16
GCC有一个“自举”的构建过程。所以,当你试图建造gcc-11时,只安装gcc-8,它将构建一个临时的“第1阶段”的版本,用Boacter-8,然后再用-11-Stage1编译循环-11。因此,不管您从什么开始,从构建过程中产生的gcc-11版本实际上都是用它自己编译的。
所以,最重要的是gcc-8,或任何以前安装的“系统编译器”,能够构建一个运行良好、足以编译第二阶段版本的gcc-11的stage1版本。无论您的系统编译器是否擅长优化,gcc的源代码都是为了使用相当小的一组语言特性而编写的(至少在第一阶段是这样),所以您不会遇到系统编译器缺少或错误地支持语言中模糊的角落的问题。从历史上看,“系统编译器”往往不是gcc,而是由计算机供应商或无关的第三方提供的一些编译器,因此人们不能很好地依赖它的质量,gcc就是在考虑这一点的情况下设计的。
理论上说,您的系统编译器可能有一个错误,它错误地编译gcc-11-Stage 1,使其看起来工作正常,但它本身却错误地编译了stage2。这是不太可能的,甚至不太可能以一种不太明显的方式发生(例如,stage2编译器仅仅是分段错误)。如果担心,可以选择让stage2构建一个stage3编译器,然后检查这两个版本是否相同。因此,只要构建完成,您就可以非常确信最终安装的编译器是好的,并且不受原始系统编译器中的bug的影响。(尽管如此,提及肯·汤普森的"关于信任的思考“在这里是必须的。)
所以在实践中,你不需要担心gcc的版本用来构建一个新的版本。无论你已经安装了什么,在合理的范围内,都会很好。
https://stackoverflow.com/questions/72830901
复制相似问题