交叉编译工具链整理
-
免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。
收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。
- 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应用程序。
- arm-none-linux-gnueabi-gcc下载:http://www.veryarm.com/arm-none-linux-gnueabi-gcc
- arm-linux-gnueabihf-gcc下载:http://www.veryarm.com/arm-linux-gnueabihf-gcc
- aarch64-linux-gnu-gcc下载:http://www.veryarm.com/aarch64-linux-gnu-gcc
- arm-none-elf-gcc下载:http://www.veryarm.com/arm-none-elf-gcc
- arm-none-eabi-gcc下载:http://www.veryarm.com/arm-none-eabi-gcc
- 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-none-linux-gnueabi-gcc
是一个交叉编译器(cross-compiler)的名称,用于在一种架构(如 x86_64 或 ARM)的计算机上编译出另一种架构(在这个例子中是 ARM)上运行的程序。这个命令名由几个部分组成,每个部分都有其特定的含义。下面是 arm-none-linux-gnueabi-gcc
的组成部分解释:
-
arm
: 这部分指定了目标架构(target architecture),即编译器生成的代码将要运行的处理器架构。在这个例子中,它是 ARM 架构,一种广泛使用的精简指令集(RISC)架构,特别是在移动设备和嵌入式系统中。 -
none
: 这个部分通常用于指定厂商或特定的ARM变种。在这个上下文中,none
表示这不是为特定的ARM厂商或变种定制的编译器,而是一个通用的ARM架构编译器。然而,这个部分的确切含义可能会根据编译器的不同而有所不同,有时它也可能被解释为不针对特定的操作系统版本或环境。 -
linux
: 这部分指定了目标操作系统(target operating system)。在这个例子中,它表明编译器是为在Linux操作系统上运行的程序生成的代码。这意呀着编译器将遵循Linux的系统调用和库接口等约定。 -
gnueabi
: 这部分比较复杂,但它通常包含了几个子部分,用于进一步描述目标环境。在这个例子中,gnu
表示GNU项目,它是一系列自由软件的集合,包括GCC编译器。eabi
(Embedded ABI,嵌入式应用二进制接口)指的是嵌入式系统的应用二进制接口,它定义了如何在嵌入式环境中调用函数、传递参数等。gnu
和eabi
结合在一起,表明这是一个遵循GNU项目和嵌入式ABI规范的编译器。 -
gcc
: 这部分指的是GNU编译器集合(GNU Compiler Collection)中的C编译器。GCC是一个开源的编译器套件,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada和Go等。在这个命令中,gcc
指的是C语言的编译器。
综上所述,arm-none-linux-gnueabi-gcc
是一个用于在Linux系统上编译针对ARM架构的嵌入式系统的C语言程序的交叉编译器。这样的编译器允许开发者在一种类型的计算机上(比如x86_64的PC)为另一种类型的计算机(比如基于ARM的嵌入式设备)编译软件。
gcc-linaro-arm-linux-gnueabihf
是一个针对 ARM 架构的交叉编译工具链的名称,通常用于在基于 x86 的系统(如个人电脑或服务器)上编译针对 ARM 架构的代码。下面是对这个名称每个部分的解释:
-
gcc:表示这是一个 GCC(GNU Compiler Collection)编译器。GCC 是一个开源的编译器集合,支持多种编程语言,包括 C、C++、Java、Ada 和其他语言。它是 Linux 系统上最常用的编译器之一。
-
linaro:表示这个 GCC 版本是由 Linaro 组织提供的。Linaro 是一个致力于开发开源软件在 ARM 架构上最佳运行的协作工程组织。
-
arm:表示这个编译器是为 ARM 架构的目标系统编译代码的。ARM 是一种广泛使用的 RISC(精简指令集计算机)架构,特别是在移动设备(如智能手机和平板电脑)中。
-
linux:表示目标操作系统是 Linux。这意味着编译出来的代码将在基于 Linux 的 ARM 系统上运行。
-
gnueabihf:这是一个指定目标 ABI(应用程序二进制接口)的后缀,用于描述编译器的目标平台特性。
- gnu:表示遵循 GNU 标准。
- eabi:表示嵌入式应用程序二进制接口(Embedded ABI),这是一种针对嵌入式系统的标准化接口。
- hf:表示硬浮点(Hard Float),这意味着浮点运算将由硬件直接支持,而不是通过软件模拟。
综上所述,gcc-linaro-arm-linux-gnueabihf
是一个针对 ARM 架构的 Linux 系统的交叉编译器,它遵循 GNU 标准,使用嵌入式应用程序二进制接口,并支持硬浮点运算。这样的编译器使得开发者可以在非 ARM 架构的系统上编译出能在 ARM 架构的 Linux 系统上运行的代码。