2

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

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

他们是否使用其他一些编译器来提出 gcc?

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

4

4 回答 4

5

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

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

真正的先有鸡还是先有蛋的问题在 1950 年代解决了,当时有人不得不编写世界上第一个编译器。之后,您可以使用一个编译器来编译下一个。

于 2012-08-03T15:19:51.193 回答
4

There are two basic ways to build a new compiler:

  1. If you're writing a new compiler for an established language like C, use an existing compiler from a different vendor to build your new compiler. For example, you could use the C compiler shipped with HP-UX to build gcc.

  2. If you're writing a compiler for a new language, start by implementing a very simple compiler in a different language (the first C compiler was written in PDP-11 assembler). This initial compiler will only recognize a small subset of the target language; basically enough to do some file I/O and some simple statements. Write a new compiler in the target language subset and build it with your first compiler. Now write a slightly more capable compiler that can recognize a larger subset of the target language, and build it with the second compiler. Repeat the process until you have a compiler capable of recognizing the full target language.

于 2012-08-03T15:53:17.060 回答
1

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

gcc main.c -nostdlib
于 2012-08-03T15:18:18.910 回答
1

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

于 2012-08-03T16:35:48.413 回答