首页 > 解决方案 > 为什么 GCC 会自己编译 3 次?

问题描述

我已经从源代码编译了 GCC,但我似乎无法完全理解gcc编译三遍的实用性。

这有什么好处?

这个答案说:

  • 使用现有的 C 编译器构建新版本的 GCC
  • 使用您刚刚构建的版本重新构建新版本的 GCC
  • (可选)重复步骤 2 以进行验证。

现在我的问题是,一旦第一步完成并构建了编译器,为什么还要浪费时间重新构建它?

只是为了验证吗?如果是这样,那似乎很浪费。

这里的事情变得更复杂

为此的构建比以前的包更复杂,因为您将更多信息发送到配置脚本并且 make 目标不是标准的。

我的意思是整个编译器都是用 C 语言编写的,所以为什么不一次完成所有事情呢?

三相自举有什么用?

提前致谢。

标签: gccarchitecturecompiler-constructionbootstrapping

解决方案


  • 阶段 2. 和 3. 是对编译器本身的一个很好的测试:如果它可以编译自己(通常还有一些库,如libgccand libstdc++-v3),那么它可以咀嚼非平凡的项目。

  • 在阶段 2. 和 3. 中,您可以生成编译器不同的选项,例如不优化 ( -O0) 或优化 ( -O2)。由于程序的输出/副作用不应取决于所使用的优化级别,因此任何一个版本的编译器都必须生成相同的二进制文件,即使它们的二进制文件非常不同。这是编译器的另一个(运行时测试)。

如果出于某种原因您更喜欢非引导程序,请配置--disable-bootstrap.


推荐阅读