【问题标题】:"C or gcc" is like "Chicken or the egg" ? :( [duplicate]“C or gcc”就像“鸡还是蛋”? :( [复制]
【发布时间】:2012-08-03 15:14:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • glibc 只是一个库。它是用 C 编写的,当然你也可以用 C 编译它。
  • 我认为他的意思是 gcc,而不是 glibc。
  • 我的意思是 gcc,对不起,我现在改标题。
  • 顺便说一下,glibc 也可以。我假设你说的是带有 gcc 的 libc,它被称为“glibc”。
  • 可能相关How are gcc/g++ bootstrapped?我不太清楚问题是什么。

标签: c glibc


【解决方案1】:

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

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

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

【讨论】:

  • 我想第一个“编译器”究竟是个什么解释器呢?
  • @AlexBelanger 我真的不认为这是一个口译员。也许是一个汇编程序。
  • 是的,可能。您不必一次实现整个语言,因此可能是整数操作、if-else 和一些循环。然后你可以使用这部分语言在以后实现其余部分。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    gcc main.c -nostdlib
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2021-04-13
        • 2011-01-05
        • 2017-03-08
        • 2021-09-29
        • 2020-05-18
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 2017-02-28
        相关资源
        最近更新 更多