交叉编译器

时间:2010-12-01 14:01:42

标签: compiler-construction cross-compiling

我理解什么是交叉编译器以及为什么使用它们。但是在一次采访中,我被问到交叉编译器在哪些方面与普通编译器不同。我告诉他们交叉编译器的目的。此外,内存映射对它们也不同。但这家伙似乎并不相信。任何人都可以告诉我与普通编译器的基本区别吗?

6 个答案:

答案 0 :(得分:3)

  

交叉编译器是能够为其创建可执行代码的编译器   除运行编译器的平台之外的平台。交叉   编译器工具用于生成嵌入式系统或的可执行文件   多个平台。它用于编译它所在的平台   编译是不可行的,就像微控制器那样   支持操作系统。使用它变得越来越普遍   用于半虚拟化的工具,其中系统可以具有一个或多个   正在使用的平台。 - WIKI

根据一些消息来源,你不能说java(或任何其他人使用运行时环境或虚拟机)作为交叉编译器。

真正的交叉编译器可以从一个源代码中定位许多平台。但你可能需要分别建立每一个

答案 1 :(得分:1)

答案 2 :(得分:0)

普通编译器可以是交叉编译器。以GCC为例。

引自Wikipedia

  GCC,免费软件集合   编译器,可以设置为交叉   编译。它支持许多平台   和语言。但是,由于受到限制   志愿者的时间和巨大的数量   努力维持工作   交叉编译器,在许多版本中   交叉编译器是   破碎。[引证需要]

     

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

答案 3 :(得分:0)

主要区别在于使用“普通编译器”,您可以在编译它的机器上运行已编译的可执行文件。使用交叉编译器,您将不得不以某种方式将其上传到使用其目标平台的系统来运行它并查看它是否有效。 (或使用某种模拟器或VM)。

这是唯一的重大区别,真的。它在编辑 - 编译 - 调试周期中增加了一两步。这可能有点痛苦。然后,通常交叉编译器用于实时或嵌入式系统,其中错误的可能结果是整个系统崩溃。如果发生这种情况,那么在您的开发系统上运行会更加更多,因为您将不断等待重新启动并重新启动编辑器,将工作文件重新加载到编辑器中等等

答案 4 :(得分:0)

某些交叉编译器具有可插入的代码生成器,因此您只需指出要生成的代码类型,它们将查找相应的生成器并为您指定的目标调用正确的汇编程序。但是,在大多数情况下,编译器是编译器;他们都做同样的事情。

答案 5 :(得分:0)

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