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

时间:2012-08-03 15:14:55

标签: c glibc

  

可能重复:
  How are gcc/g++ bootstrapped?

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

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

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

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

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

gcc main.c -nostdlib

答案 3 :(得分:1)

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