交叉编译器(cross-compiler)是用来编译可在与编译器运行环境不同的架构或操作系统上运行的代码的工具。交叉编译器的命名通常遵循一个约定,以便能够描述编译器的目标平台。这个命名规则主要包含以下几个组成部分,通常顺序为:
-
目标架构(Target Architecture):
表示编译器生成代码的目标处理器架构。例如arm
,x86_64
,i686
,mips
等。 -
目标供应商(Target Vendor):
有时会指定为目标系统的制造商或供应商名称,但很多时候这部分可能会被省略。 -
目标系统(Target System):
包含目标操作系统信息,例如linux
,none
(对于裸机或无操作系统的编程),eabi
(嵌入式应用二进制接口)。 -
编译器版本或编译器名称:
指示编译器类型,如gcc
(GNU Compiler Collection)。
交叉编译器的名称通常会用连接符-
来连接这些部分,例如:
-
arm-none-linux-gnueabihf-gcc
:arm
: 目标架构是ARM。none
: 不指定供应商。linux-gnueabihf
: 目标系统是使用GNU C库的Linux,eabihf
是指"embedded-application binary interface hard float",表示使用硬件浮点。gcc
: 编译器为GNU编译器集合。
-
i686-pc-linux-gnu-gcc
:i686
: 目标架构是Intel 686。pc
: 目标供应商是个人电脑(PC)。linux-gnu
: 目标系统是GNU/Linux。gcc
: 编译器为GNU编译器集合。
-
aarch64-linux-android-gcc
:aarch64
: 目标架构是64位ARM架构。linux
: 目标系统是Linux。android
: 这里指定了额外的操作系统信息,即目标平台是Android。gcc
: 编译器为GNU编译器集合。
命名规则可以根据具体的编译器和它所支持的目标平台有所变化。一些工具链可能将某些部分省略或者按不同的约定命名。重要的是理解这个命名规则中的每一部分都是为了描述交叉编译器的构建环境和目标环境。
交叉编译器的命名规则通常涉及源平台和目标平台的信息。一个交叉编译器允许你在一个平台(称为主机)上编译代码,生成能运行在不同平台(称为目标)上的程序。交叉编译器的命名一般遵循以下格式:
[arch]-[vendor]-[sys]-[abi]
- arch: 表示目标硬件架构,比如
arm
、x86_64
、mips
等。 - vendor: 指硬件供应商,有时候可能会省略。它可以是诸如
apple
、pc
等。 - sys: 描述目标系统类型,比如
linux
、darwin
(macOS)、win32
等。 - abi: 表示目标的应用二进制接口(Application Binary Interface),比如
gnu
、eabi
、gnueabihf
等。
交叉编译器通常以其目标系统名称结尾,例如:
-
arm-linux-gnueabihf-g++
:arm
: 目标是ARM架构。linux
: 目标系统是Linux。gnueabihf
: 使用GNU C库、EABI硬浮点调用标准。g++
: 这是GNU C++编译器。
-
x86_64-w64-mingw32-gcc
:x86_64
: 目标是64位x86架构。w64
: 是Windows 64位的缩写。mingw32
: 表示这是MinGW-w64工具链(Windows的一个最小系统环境)的32位版本。gcc
: 这是GNU C编译器。
-
i686-pc-linux-gnu-gcc
:i686
: 目标是Intel的第六代及以上的32位处理器(Pentium Pro及其后续版本)。pc
: 个人电脑。linux-gnu
: 目标系统是基于GNU的Linux。gcc
: GNU C编译器。
-
aarch64-linux-android-clang
:aarch64
: 目标是64位ARM架构。linux
: 目标系统内核是Linux。android
: 运行系统是安卓。clang
: 这是Clang编译器,它是LLVM项目的一部分。
请注意,具体命名规则可能因具体工具链和它们的版本而异。个别工具链可能会有额外的后缀或前缀来指示特定的版本信息或构建选项。
标签:gcc,架构,GNU,交叉,目标,编译器,linux,命名 From: https://www.cnblogs.com/peifx/p/18466057