如何引导gcc / g ++?

这一直在困扰我一段时间。 gcc / g ++如何编译自己? 我猜测每一个版本都会被编译成一个以前的版本。 这是真的? 如果是这样,这是否意味着最古老的g ++ / gcc版本是用汇编编写的?

GCC的最早版本是使用另一个C编译器编译的,因为在编写时还有其他版本。 有史以来第一个C编译器(约1973,IIRC)是在PDP-11程序集中实现的,或者是在其之前的B编程语言中实现的,但在任何情况下B编译器都是以汇编语言编写的。 同样,第一个C ++编译器(CPre / Cfront ,1979-1983)可能首先在C中实现,然后用C ++重写。

当您编译GCC或任何其他自承载编译器时,完整的构build顺序是:

  1. 使用现有的C编译器构build新版本的GCC
  2. 重新构build你刚刚build立的GCC的新版本
  3. (可选)重复步骤2进行validation。

这个过程被称为自举 。 它testing编译器编译自身的能力,并确保生成的编译器具有它自己实现的所有优化。

编辑 :Drew Dormann,在评论中,指向Bjarne Stroustrup的最早实现C ++的说明 。 它是用C ++实现的,但是被Stroustrup称为“预处理器”的C ++语言转换为C语言; 根据他的定义,不是一个完整的编译器,但是C ++仍然是在C中引导的。