Compiler construction 交叉编译器

Compiler construction 交叉编译器,compiler-construction,cross-compiling,Compiler Construction,Cross Compiling,我了解什么是交叉编译器以及为什么使用交叉编译器。但在一次采访中,我被问到交叉编译器在哪些方面不同于普通编译器。我告诉他们交叉编译的目的。此外,内存映射对他们来说也会有所不同。但这家伙似乎并不信服。有谁能告诉我与普通编译器的基本区别吗?普通编译器可以是交叉编译器。比如说 引述自: GCC,一个 编译器,可以设置为跨 编译。它支持多种平台 和语言。然而,由于有限的 志愿者的时间和大量的 维持工作所需的工作 交叉编译器,在许多版本中 交叉编译器中的 坏了。[需要引用] GCC要求 binutils可用

我了解什么是交叉编译器以及为什么使用交叉编译器。但在一次采访中,我被问到交叉编译器在哪些方面不同于普通编译器。我告诉他们交叉编译的目的。此外,内存映射对他们来说也会有所不同。但这家伙似乎并不信服。有谁能告诉我与普通编译器的基本区别吗?

普通编译器可以是交叉编译器。比如说

引述自:

GCC,一个 编译器,可以设置为跨 编译。它支持多种平台 和语言。然而,由于有限的 志愿者的时间和大量的 维持工作所需的工作 交叉编译器,在许多版本中 交叉编译器中的 坏了。[需要引用]

GCC要求 binutils可用于每个 目标平台。尤其地 重要的是GNU汇编程序。 因此,binutils首先必须是 使用开关正确编译 --target=发送到配置脚本的某些目标。GCC也必须得到批准 配置了相同的--target 选项然后,GCC可以正常运行 如果工具 binutils创建的,可在 路径

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

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


实际上,跨编译器可以从一个源代码中针对多个平台。但是,您可能必须分别构建它们中的每一个。主要区别在于,使用“普通编译器”,您可以在编译它的机器上运行已编译的可执行文件。使用交叉编译器时,您必须以某种方式将其上载到使用其目标平台的系统,以运行它并查看它是否工作。(或者使用某种模拟器或虚拟机)


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

一些交叉编译器具有可插入的代码生成器,因此,您只需指示要生成的代码类型,它们将查找适当的生成器,并为您指定的目标调用适当的汇编程序。不过,在很大程度上,编译器是一个编译器;它们都做相同的事情。

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

您认为其目的是什么?无论您的答案是什么,有些面试官都擅长面无表情。也许你确实说服了他,但他不想对你的答案做出强烈反应。在这种情况下,一个很好的建议是询问他们认为答案是什么。即使你没有得到这份工作,你也会学到一些新东西。在一次采访中,当被问及多线程时,我也遇到了类似的情况。多线程被过度使用,通常是不必要的。面试官问什么时候有用,我想不出一个真正好的例子,问了他同样的问题。我没有得到这份工作,但我确实用一个非常好的答案增加了我的编程知识。你是如何回答这个问题的?在不知道你说了什么的情况下,很难帮助你。@EJP:我告诉他,为了在不同的体系结构上运行映像和可执行文件,而不是在编写代码的体系结构上运行,我们使用交叉编译器。我也给了他一个例子。向他解释了不同体系结构的字大小和内存映射是如何不同的,因此我们需要交叉编译器。这就是交叉编译器所做的。它们在哪些方面不同于普通编译器?将“cross”替换为“normal”,然后替换为“。。。。对于运行编译器的平台。然后创建一个描述这种差异的句子。好吧,许多在技术上不是交叉编译器的编译器也可以这样做,这取决于您的侦听器如何解释“平台”。我更倾向于否定地定义它:用交叉编译器构建的可执行文件不能在编译它的平台上本机运行。但这并不能回答交叉编译器与其他编译器的区别compilers@ravspratapsingh如果我错了,有人纠正我,但我不认为你可以有一个交叉编译器,它也不是一个编译器。交叉编译器是一种编译器,它可以为调用编译的主机平台以外的目标平台生成代码。如果这样的回答不能让面试官满意,那么我想知道他的答案是什么。我想他想知道编译器代码到底有多不同。我怀疑:你整个星期都会在那里。