小编典典

GCC 和 g++ 是如何引导的?

all

这一直困扰着我一段时间。GCC 和 g++ 如何自己编译?

我猜每个版本都是用以前构建的版本编译的。这是真的?如果是,这是否意味着最古老的 g++ 和 GCC 版本是用汇编语言编写的?


阅读 66

收藏
2022-07-09

共1个答案

小编典典

最古老的 GCC 版本是使用另一个 C 编译器编译的,因为在编写它时还有其他版本。有史以来第一个 C 编译器(约 1973
年,IIRC)是在PDP-11汇编或之前的 B 编程语言中实现的,但无论如何
B 编译器是用汇编编写的。 类似地,第一个 C 编译器(CPre/
Cfront
,1979-1983)可能首先用 C 实现,然后用 C

重写。

当您编译 GCC 或任何其他自托管编译器时,构建的完整顺序是:

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

这个过程称为引导。它测试编译器自己编译的能力,并确保生成的编译器是用它自己实现的所有优化构建的。

编辑 :Drew Dormann 在评论中指出 Bjarne Stroustrup对 C++
最早实现的描述
。它是用 C 实现的,但由
Stroustrup 所谓的“预处理器”从 C
翻译成 C;根据他的定义,它不是一个完整的编译器,但 C++ 仍然是在 C 中引导的。

2022-07-09