这一直困扰着我一段时间。GCC 和 g++ 如何自己编译?
我猜每个版本都是用以前构建的版本编译的。这是真的?如果是,这是否意味着最古老的 g++ 和 GCC 版本是用汇编语言编写的?
最古老的 GCC 版本是使用另一个 C 编译器编译的,因为在编写它时还有其他版本。有史以来第一个 C 编译器(约 1973 年,IIRC)是在PDP-11汇编或之前的 B 编程语言中实现的,但无论如何 B 编译器是用汇编编写的。 类似地,第一个 C 编译器(CPre/ Cfront,1979-1983)可能首先用 C 实现,然后用 C 重写。
当您编译 GCC 或任何其他自托管编译器时,构建的完整顺序是:
这个过程称为引导。它测试编译器自己编译的能力,并确保生成的编译器是用它自己实现的所有优化构建的。
编辑 :Drew Dormann 在评论中指出 Bjarne Stroustrup对 C++ 最早实现的描述。它是用 C 实现的,但由 Stroustrup 所谓的“预处理器”从 C 翻译成 C;根据他的定义,它不是一个完整的编译器,但 C++ 仍然是在 C 中引导的。