我想知道的gcc编译方式,因为我们都知道它是用C写的
他们是否使用了一些其他编译器拿出gcc?
如果是这样,我可以使用相同的编译来编译我的C程序吗?
我想知道的gcc编译方式,因为我们都知道它是用C写的
他们是否使用了一些其他编译器拿出gcc?
如果是这样,我可以使用相同的编译来编译我的C程序吗?
他们没有使用其他编译器。你可以编写一个不使用glibc的C程序,只需告诉编译器不要使用它。所以像这样:
gcc main.c -nostdlib
这里没有鸡和鸡蛋。 glibc是使用您正在使用的编译器进行编译的。
该编译器首先使用相同编译器的以前版本编译。然后它可以自行编译。
真正的鸡与鸡蛋问题在20世纪50年代被解决,当时有人不得不编写世界上第一个编译器。之后,您可以使用一个编译器编译下一个。
我想第一个“编译器”实际上是一个解释器呢? – 2012-08-03 15:25:49
@AlexBelanger我真的不认为这是一位口译员。也许是一个汇编程序。 – Hassan 2012-08-03 15:27:13
是的,可能。你不必一次实现整个语言,所以也许整数运算,if-else和一些循环。然后,您可以使用该语言的这一部分来稍后执行其他部分。 – 2012-08-03 15:33:00
有两种基本的方法来建立一个新的编译器:
如果你正在写一个新的编译器为像C建立语言,使用现有的编译器从不同的供应商建立自己的新的编译器。例如,您可以使用随HP-UX附带的C编译器构建gcc
。
如果您正在为新语言编写编译器,请先以不同语言实现一个非常简单的编译器(第一个C编译器用PDP-11汇编器编写)开始。这个初始编译器只会识别目标语言的一小部分;基本上足以做一些文件I/O和一些简单的语句。在目标语言子集中编写一个新的编译器,并使用第一个编译器构建它。现在编写一个功能稍强的编译器,可以识别目标语言的更大的子集,然后使用第二个编译器编译它。重复这个过程直到你有一个编译器能够识别完整的目标语言。
这是一个有趣的问题。我想你想知道用什么语言编写了一种新语言的编译器,不是吗?那么,如果我们只有汇编语言(例如x86),编写C编译器的唯一方法就是汇编语言。后来,我们可以使用我们的汇编编译器编写一个更好,更强大的用C语言编写的编译器,等等...... 问题出现了:早期的程序员如何编写第一个汇编编译器?我的父亲告诉我:通过手动输入1和0! :-)
glibc只是一个库。它是用C编写的,当然你可以用C编译它。 – 2012-08-03 15:17:56
我认为他的意思是gcc,而不是glibc。 – 2012-08-03 15:18:46
我的意思是gcc,对不起,我现在会改变标题。 – Viswesn 2012-08-03 15:20:05