有人可以解释工具链对操作系统和平台架构的依赖性,例如,如果我想为arm架构编译代码,我应该寻找平台架构还是运行该平台的操作系统,然后调整工具链呢? / p>
答案 0 :(得分:3)
大多数编译器将其代码编译为汇编语言。它们产生的代码很可能取决于对操作系统的各种调用(例如,分配动态存储器),并且具有定义文件属性的头部,例如代码和数据部分(例如ELF,PE)的位置。然后,汇编程序将此程序集编译为目标文件,这些目标文件使用此平台的链接器进行链接。所有这些工具都为特定的体系结构和操作系统生成代码。
这并不意味着编译器和链接器无法在其他类型的系统上运行。编译另一个系统的代码的过程称为交叉编译。尽管这种方法不像编译器运行时那样常用于编译同一平台,但它却非常常用。一些例子是编译OS内核,当然不能依赖于另一个操作系统,或者为Android编译本机代码(android NDK包含交叉编译器)。