我如何从头开始编写交叉编译器?

时间:2013-09-12 15:08:01

标签: c gcc assembly compiler-construction cross-compiling

我是计算机科学专业的学生,​​直到最后一年。

对于我的最后一年项目我想根据编译器做一些事情,然后由导师指导编写交叉编译器。

但似乎无处不在我看起来我是针对'编写编译器'或'这是你如何使用交叉编译器'

我正在寻找信息来说明'这是一个交叉编译器它是用这种语言编写的,可能的方法是'

感谢您的帮助!\

编辑:感谢大家的帮助。我现在处于一个更舒适的位置,理解我可以开始研究和生产项目的可交付成果。

2 个答案:

答案 0 :(得分:3)

说实话,这是一个非常广泛的问题。但是要开始解决它,“交叉编译器”与普通编译器没有本质区别 - 除了它针对的是另一个平台而不是它运行的平台。但是,编译器通常不会根据他们当前运行的平台的具体情况来确定输出,因此差异实际上是不存在的。

您尚未指定要为其编写编译器的语言。在选择编写编译器(而不是解释器)之后,我认为你可能已经隐含地排除了一些传统解释语言。

如果您的源语言不是C,那么一个好的开始方法是从您选择的语言编写一个源到源编译器到C.这是一个非常有趣的练习,它允许您坚持使用高级的东西(如lexing,解析,函数调用解析等),而不会搞乱像建筑怪癖这样的低级东西。如果您的输出代码是可移植的C,那么您可以插入所需的任何C编译器(例如GCC)并利用现有目标。

或者,您可以通过创建“前端”(从您选择的语言到LLVM IR,这是一种可移植字节码的形式)来定位LLVM,这是一个非常强大且可扩展的编译器基础结构。 )。然后,您可以利用现有的“后端”(从LLVM IR到任何目标架构的编译器)来生成二进制文件。

如果你想自己制作组件,那也是可能的。该策略与上述两种情况中概述的策略相同,除了您不会发出C或LLVM IR,而是您的体系结构的程序集。如果您正在发布工作程序集,更改它以反映另一个体系结构(并将其转换为交叉编译器)再次是微不足道的。

答案 1 :(得分:0)

了解gcc工具链是如何设计和开发的。它针对许多平台和机器。它还支持多种语言。