2010-12-01 273 views
2

我了解什么是交叉编译器,以及它们为什么被使用。但在一次采访中,有人问我,跨编译器与普通编译器有什么不同。我告诉了他们交叉编译器的目的。另外,它们的内存映射也会不同。但这个人似乎并不相信。任何人都可以告诉我与普通编译器的基本区别吗?交叉编译器

+0

你认为目的是什么? – mkb 2010-12-01 14:03:50

+1

无论你的答案是什么,一些采访者擅长于保持沉默。也许你确实说服了他,但他不想对你的回答作出强烈反应。 – 2010-12-01 14:05:49

+0

对于这种情况,一个好的提示是问他们相信答案是什么。即使你没有得到这份工作,你也会学到新的东西。在面试中被问及多线程时,我也遇到过类似的情况。多线程非常非常使用,通常是不必要的。面试官问什么时候会有用,我想不出一个很好的例子,问他同样的问题。我没有得到这份工作,但是我的确提高了编程知识,并获得了非常好的答案。 – AlastairG 2010-12-01 14:08:47

回答

0

正常的编译器可以是交叉编译器。以GCC为例。

Wikipedia报价:

GCC的 编译器免费软件集合,可以设置交叉编译 。它支持多种平台 和语言。然而,由于有限的 志愿者的时间,它需要保持工作 交叉编译器,在许多版本 工作的大量交叉编译器的一些 是 坏了。[来源请求]

GCC需要编译 binutils的副本可用于每个 目标平台。尤其是 重要的是GNU汇编程序。 因此,binutils首先必须 与开关 正确编译--target = some-target发送到配置脚本。海湾合作委员会也必须是 配置相同的 - 目标 选项。然后,GCC可以正常运行 ,前提条件是 路径中提供了binutils创建的工具。

3

交叉编译器是能够为 创建可执行代码比在其上运行编译器的一个其它的平台的编译器。 Cross 编译器工具用于为嵌入式系统或多个平台生成可执行文件。它被用来编译一个平台,在这个平台上编译不可行,就像不支持操作系统的微控制器一样。使用这个 工具进行半虚拟化的情况已经变得更加普遍,其中系统可能有一个或多个 平台在使用。 - WIKI

根据一些消息来源你不能只是说Java(或任何其他人使用的运行环境或虚拟机)的交叉编译器。

真正的交叉编译器可以针对来自一个源代码的许多平台。但你可能必须分别构建它们中的每一个

0

主要区别在于,使用“正常编译器”,您可以在编译它的机器上运行编译的可执行文件。使用交叉编译器,您必须将其上传到系统,然后使用其目标平台以某种方式运行它并查看它是否有效。 (或使用某种模拟器或虚拟机)。

这是唯一的巨大差异,真的。它在编辑 - 编译 - 调试周期中增加了一两个步骤。这可能有点痛苦。再次,通常交叉编译器用于实时或嵌入式系统,其中可能由错误导致的系统崩溃。如果发生这种情况,您将需要等待重新启动并重新启动编辑器,将工作文件重新加载到您的编辑器中,这会使更多难以在您的开发系统上运行。

0

一些交叉编译器具有可插入的代码生成器,因此您只需指明您想要生成的代码类型,并且它们将查找适当的生成器并为您指定的目标调用适当的汇编器。不过,大多数情况下,编译器是一个编译器;他们都做同样的事情。

0

我认为交叉编译器使用不同的汇编语言代码。例如,i366和arm使用不同的汇编语言代码。