交叉编译,通俗地讲就是在一种平台上编译,在另一种平台上运行
比如在PC平台(X86 CPU)上编译ARM平台上的程序,最终放到arm平台上运行。
- 交叉编译工具命名规则为:arch [-vendor] [-os] [-(gnu)eabi]
项目 | 说明 |
---|---|
arch | 体系架构,如ARM,MIPS |
vendor | 工具链提供商 |
OS | 目标操作系统 |
eabi | 嵌入式应用二进制接口(Embedded Application Binary Interface) |
- ABI 和 EABI
项目 | 说明 |
---|---|
ABI | 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。 |
EABI | 嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。 |
两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。
- 常用交叉编译工具
项目 | 说明 | 操作系统 |
---|---|---|
arm-none-linux-gnueabi-gcc | Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。 | 支持 |
arm-linux-gnueabihf-gcc | 由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。 | 支持 |
aarch64-linux-gnu-gcc | 由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。 | 支持 |
arm-none-elf-gcc | Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。 | 不支持 |
arm-none-eabi-gcc | GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。 | 不支持 |
arm-eabi-gcc | Android ARM 编译器。 | |
armcc | ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux 应用程序。armcc一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc 编译器都是收费的。 | 不支持 |
arm-none-uclinuxeabi | 用于uCLinux,使用Glibc。 | 支持 |