“C或gcc”就像“鸡肉还是鸡蛋”? :(

可能重复:
gcc / g ++是如何引导的?

我想知道gcc是如何编译的,因为我们都知道它是用C语言编写的。

他们是否使用其他编译器来提供gcc?

如果是这样,我可以使用相同的编译来编译我的C程序吗?

这里没有鸡肉和鸡蛋。 glibc是使用您正在使用的编译器编译的。

该编译器首先使用同一编译器的先前版本编译。 然后它也可以编译自己。

真正的鸡与蛋问题在20世纪50年代得到了解决,当时有人必须编写世界上第一个编译器。 之后,您可以使用一个编译器来编译下一个编译器。

构建新编译器有两种基本方法:

  1. 如果您正在为C等已建立的语言编写新的编译器,请使用其他供应商的现有编译器来构建新的编译器。 例如,您可以使用HP-UX附带的C编译器来构建gcc

  2. 如果您正在为新语言编写编译器,请首先使用不同的语言实现一个非常简单的编译器(第一个C编译器是用PDP-11汇编程序编写的)。 这个初始编译器只能识别目标语言的一小部分; 基本上足以做一些文件I / O和一些简单的语句。 在目标语言子集中编写新的编译器,并使用第一个编译器构建它。 现在编写一个稍微强大的编译器,它可以识别目标语言的更大子集,并使用第二个编译器构建它。 重复此过程,直到您有一个能够识别完整目标语言的编译器。

他们没有使用其他一些编译器。 你可以编写一个不使用glibc的C程序,只需告诉编译器不要使用它。 所以这样的事情:

 gcc main.c -nostdlib 

这是个有趣的问题。 我想你在想用什么语言编写一种新语言的编译器,不是吗? 好吧,如果我们只有汇编语言(例如,x86),编写C编译器的唯一方法是使用汇编语言。 之后,我们可以编写一个更好的,更强大的C语言编译器,使用我们的汇编编写的编译器,等等…问题出现了:早期程序员是如何编写第一个汇编编译器的? 我的父亲告诉我:通过手动输入1和0! 🙂