Cross编译器与OS有什么关系?

时间:2015-03-26 16:04:35

标签: compiler-construction compilation

我试图理解为什么我们需要交叉编译器,我发现如果我们需要在不同的平台上生成二进制文件,我们需要一个交叉编译器来生成目标平台的二进制文件。 我的问题是,交叉编译器与操作系统有什么关系吗? 示例如果我在带有ARM处理器的Windows机器上运行编译器,生成的二进制文件是否可以直接运行在ARM处理器上运行的Linux机器上?编译器是否在二进制文件周围添加了任何特定的包装器,以便操作系统理解它?

感谢您的回复

1 个答案:

答案 0 :(得分:2)

二进制格式通常是特定于操作系统的,它们反过来触摸代码生成:

  • 与动态链接相关的任何内容都可能是特定于操作系统的。如何定义或调用动态库中的符号,表格等等。
  • 重新定位并避免它(想想与位置无关的代码生成)。
  • 确切的ABI可能会产生影响(例如,SSE的堆栈对齐)
  • 资源。
  • TLS实施
  • 关于符号的规则(例如,某些二进制格式使用" _"
  • 为所有符号添加前缀
  • 生成汇编元语句,例如section。

除此之外,编译器通常会对链接器进行调用,这也可能需要额外的细节知识。

所以它肯定是一种交叉形式。交叉到足以构建一个单独的编译器?这很难说。但是没有人说过两种不同的架构也是两个独立的二进制文件。这只是惯例和架构的结果。

E.g。 Free Pascal在同一架构上不需要单独的二进制文件来进行跨操作系统编译,因此Linux编译器可以生成Windows二进制文件。甚至更强大,Linux编译器还具有内置相应体系结构的win32 / 64汇编器,归档器和链接器。