在折腾嵌入式开发,用到交叉编译器的时候,常常会看到这样的名字:
arm-xscale-linux-gnueabi-gcc
arm-liunx-gnu-gcc
等等
其中,对应的交叉编译器的前缀为:
arm-xscale-linux-gnueabi-
arm-liunx-gnu-
下面以编译crosstool-ng中:通过ct-ng list-samples中得到的输出为例,当做交叉编译器的名字的例子,供参考:
交叉编译工具链的命名规则为:
arch [-vendor] [-os] [-(gnu)eabi]
arch – 体系架构,如ARM,MIPS
vendor – 工具链提供商
os – 目标操作系统
eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface)
根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如
arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库。
arm-none-linux-eabi:用于Linux的,使用Glibc
下面是详细解析
一、交叉编译器的命名规则
1、交叉编译器名字中的arch部分
arch,即系统架构
表示交叉编译器,是用于哪个目标系统架构中,用于那个平台中的。即,用此交叉编译器编译出来的程序,是运行在哪种CPU上面的。
arch的值,常见的有很多种,比如arm,x86,mips等等。
举例:交叉编译器中的arch的值 arm-cortex_a8-linux-gnueabi中的arm mips-ar2315-linux-gnu中的mips powerpc-e500v2-linux-gnuspe中的powerpc x86_64-unknown-mingw32中的x86_64
1.1 crosstool-ng中arch的值
crosstool-ng中,和arch对应的值,应该就是"Target options"中的"Target Architecture"的值了。
比如常见的,配置为arm的话,就是:
对应的配置参数是:ARCH_arm
2、交叉编译器名字中的vendor部分
vendor,即生成厂家,提供商
表示谁提供的,即谁制作出来