这已经困扰我一段时间了。 GCC和g++是如何自己编译的?
我猜每个版本都会使用以前构建的版本进行编译。这是真的?如果是,是否意味着最古老的 g++ 和 GCC 版本是用汇编语言编写的?
最佳答案
最旧的 GCC 版本是使用另一个 C 编译器编译的,因为在编写它时还有其他版本。第一个 C 编译器(约 1973 年,IIRC)在 PDP-11 中实现。汇编,或在它之前的 B 编程语言中,但无论如何 B 编译器是用汇编编写的。 同样,第一个 C++ 编译器(CPre/Cfront,1979-1983)可能首先用 C 实现,然后用 C++ 重写。
当您编译 GCC 或任何其他自托管编译器时,构建的完整顺序是:
- 使用现有的 C 编译器构建新版本的 GCC
- 用刚刚构建的 GCC 重新构建新版本
- (可选)重复第 2 步以进行验证。
这个过程被称为 bootstrapping .它测试编译器的 self 编译能力,并确保生成的编译器使用它自己实现的所有优化来构建。
编辑:Drew Dormann 在评论中指出 Bjarne Stroustrup 对 earliest implementation of C++ 的描述.它是用 C++ 实现的,但由 Stroustrup 所谓的“预处理器”从 C++ 翻译成 C;根据他的定义,它不是一个完整的编译器,但 C++ 仍然是在 C 中引导的。
关于c++ - GCC 和 g++ 是如何引导的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429491/