LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: mage1982

先有鸡还是先有蛋?为什么GCC 的源代码是C语言?

[复制链接]
发表于 2008-4-2 16:11:40 | 显示全部楼层
i386平台对未知平台,那你就用c写一个,然后用i386平台的编译器,编译出来。
再用你编译出来的这个编译器,交叉编译目标程序。
回复 支持 反对

使用道具 举报

发表于 2008-4-2 16:35:27 | 显示全部楼层
假设我们现在有一台 pc, 它上面有在 pc 本地运行的 gcc, 并且它生成的程序也是跑在 pc 上的, 我们称这样的 gcc 为本地 gcc

现在我们有另一台 mips 平台的电脑, 而且我们没有它上面能跑的 gcc 或者任何其它的编译器, 然后我们的目的是想办法为其制作一套编译器.

ok, 我们先要在 pc 上搞到 gcc/binutil/*libc/... 以及所有制作工具链必需的工具的源代码, (当然你也可以从 0 开始写一套, 不管怎样, 它只是 pc 上的程序, 并非凭空的蛋或者鸡) 为了便于描述, 让我们统称它们为 gcc. 然后我们对进行修改, 让它具备生成 mips 平台的程序的能力. 这样我们就可以利用本地的 gcc 和这套 hack 过的源码编译一套运行在 pc 上, 但是生成的程序却跑在 mips 上的编译器, 它可能被称为 mips-linux-gcc.

好了, 下面我们来看这套假想的 mips 系统, 假设它是一个新诞生的平台, 上面还没有任何能跑的程序, 那么我们就用这套 mips-linux-gcc 为其交叉编译一套操作系统及相关的软件.

然后我们再用 mips-linux-gcc 对刚才已经修改过的源码再一次进行编译, 当然有可能需要再进一步进行修改, 并保证最终得到的是套可以运行在 mips 上, 也可以生成 mips 本地代码的 gcc, 这样把它拷到 mips 上后, 我们可以用它来写新的编译器了.


再回到楼主后来的问题, 如何写一个 对未知平台 的编译器? 上面提到了, 这只是 pc 本地的开发, 它并不是跑在未知平台上的. 至于如何写出这样的编译器就不在楼主讨论的范围了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-2 17:48:14 | 显示全部楼层
谢谢大家的回答!我基本上已经明白了。


说句题外话:
这样做不就是不断从已有的东西不断派生么:)
总觉得怪怪的。。。我们通过XX老的编译器,让她生出新的,
又把新的XX了,生出更新的,总觉得编译器挺可怜的。。。我们好残忍。。。
回复 支持 反对

使用道具 举报

发表于 2008-4-2 19:51:03 | 显示全部楼层
这个问题,真的学到了不少!
感谢楼主的问题,以及解答的朋友们
回复 支持 反对

使用道具 举报

发表于 2008-4-3 13:03:12 | 显示全部楼层
还是要学习《编译原理》,学了之后就清楚了。
回复 支持 反对

使用道具 举报

发表于 2008-4-3 15:35:18 | 显示全部楼层
Post by mage1982;1834066
谢谢大家的回答!我基本上已经明白了。


说句题外话:
这样做不就是不断从已有的东西不断派生么:)
总觉得怪怪的。。。我们通过XX老的编译器,让她生出新的,
又把新的XX了,生出更新的,总觉得编译器挺可怜的。。。我们好残忍。。。
所以嘛,少点大男人主义,善待女人。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表