1

I am a Computer Science student going into my final year.

For my final year project I wanted to do something based on compilers, and was then directed by tutors towards Writing a Cross Compiler.

But it seems everywhere I look I'm directed towards either 'Writing a compiler' or 'This is how you use a cross compiler'

I'm looking for information to state 'This is a cross compiler, it was written in this language, possible ways of doing this are'

Thanks for your help!\

Edit: Thanks for everyones help. I am now in a more comfortable position of understanding where I can start researching and produce deliverables for my project.

4

2 回答 2

3

老实说,这是一个非常广泛的问题。但是要开始解决这个问题,“交叉编译器”与普通编译器没有本质区别——除了它针对的是另一个平台而不是它所运行的平台这一事实。但是,无论如何,编译器通常不会将其输出基于它们当前运行的平台的具体细节,因此实际上不存在差异。

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

如果你的源语言不是 C,那么一个好的开始方法是编写一个从你选择的语言到 C 的源到源编译器。这是一个非常有趣的练习,它可以让你坚持使用高级的东西(如词法分析、解析、函数调用解析等)而不会弄乱诸如架构怪癖之类的低级内容。如果您的输出代码是可移植的 C,那么您可以插入任何您想要的 C 编译器(例如GCC)并利用现有目标。

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

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

于 2013-09-12T15:21:30.833 回答
0

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

于 2013-09-12T15:19:51.520 回答