我试图理解gcc交叉编译器背后的命名约定,但似乎有相互矛盾的答案。我的系统中有以下三个交叉编译器:
- ARM -none-linux-gnueabi (codesourery ARM compiler for linux)
- ARM -none-eabi (codesourery ARM编译器用于裸机系统)
- ARM -eabi (Android ARM编译器)
在阅读GNU libtool手册时,它将交叉编译器命名约定指定为:
cpu-vendor-os (os = system/kernel-system)
对于我的系统中的编译器来说,这似乎并不完全准确。GNU手册中的信息是旧的,还是编译器分发器只是不再遵循它?
命名是这样的:
arch-vendor-(os-)abi
例如:
x86_64-w64-mingw32
= x86_64架构(=AMD64), w64 (=mingw-w64作为"vendor"), mingw32 (=win32 API由GCC看到)
i686-pc-msys
= 32位(pc=通用名)msys binary
i686-unknown-linux-gnu
= 32位GNU/linux
还有你的例子:
arm-none-linux-gnueabi
= ARM架构,无厂商,linux操作系统,gnueabi ABI。
arm-eabi
就像你说的,用于Android原生应用。
一个警告:Debian使用不同的命名,只是为了困难,所以如果您在基于Debian的系统上,请小心,因为它们对eg有不同的名称。i686-pc-mingw32
.
事实是,有一个规则,它就是上面从rubenvb描述的规则。但在某些情况下,您会发现命名是不正确的,如:
gcc-pippotron-6.3.1-2017.05-x86_64_arm-linux-gnueabihf
gcc-pippotron-arm-none-eabi-4.8-2013.11_linux