Which should be used for cross compiling a C program for ARMarm-linux-gnu-gcc
和有什么区别?arm-linux-gcc
答案1
如果您只想编译在处理器(“裸机”系统)上独立运行的程序,那么最重要的是拥有一个为该特定处理器生成指令的编译器。 “对于 ARM”几乎是足够的信息,但还不够:您还需要指定指令集的版本。如今大多数 ARM 处理器都基于相同的版本 (ARMv7),但即使在内部也存在许多复杂性 - 某些功能(例如浮点、向量指令)是可选的,您需要指定是否使用它们,而 ARMv7 实际上有两个指令集(“普通”ARM 和 Thumb)。大多数 GCC for ARM 发行版都以 ARMv7 为目标,具有可选功能和通过选项启用的 Thumb。
如果要编译与其他程序交互的程序,那么所有涉及的程序都需要能够通信。进行系统调用,更重要的是,进行库调用要求调用者和被调用者就数据的二进制表示(例如字节顺序)以及如何传递数据(哪些寄存器用于函数参数,函数调用如何影响堆栈等)。其工作原理的规范称为ABI(应用程序二进制接口)。
这GCC 交叉编译器的通用命名约定是(前面的部分与CPU-VENDOR-SYSTEM-gcc
-gcc
系统类型)configure
,但该部分存在一些模糊之处。 ARM 的交叉编译器通常在调用时省略一些部分。例如,对于 ARM 的 GCC(默认为 v7),对于 ACME 的 Linux 发行版,设置为使用 gnueabi ABI 链接到 Glibc。表示在 Linux 上设置为链接到 Glibc 的编译器,具有未指定的 ABI。没有指定目标 libc。VENDOR-SYSTEM
arm-VENDOR-OS-LIBC-ABI-gcc
arm-acme-linux-gnu-gnueabi-gcc
arm-linux-gnu-gcc
arm-linux-gcc