我在 Linux 环境中看到文件名的模式是 -
x86_64-pc-linux-gnu
x86_64-linux-gnu-gcc
i386-pc-linux-gnu
看起来像名称的第一部分 -x86_64
或者i386
表示硬件架构。
但想知道整个名字是如何形成的?名字的其他部分是如何组成的?
答案1
这些是“配置名称”,也称为“三元组”。我所知道的最好的描述是Ian Lance Taylor 的 GNU 配置和构建系统文档。
配置名称最多分为四个部分(最初是三个部分,因此有“三元组”绰号):
- CPU 或架构 (
i386
,x86_64
,arm
...) - “制造商”(
pc
在你的例子中) - 内核 (
linux
) - 操作系统,通常归结为 C 库(
gnu
、IEGNU 操作系统,包括 GNU C 库),但可以更具体(gnueabihf
在 ARM 上,IEGNU 操作系统,使用 ARM“嵌入式”ABI 和硬浮点)
其中一些可以省略,例如pc
在第二个示例中;config.sub
将为您提供它识别的任何“三元组”的规范形式:
$ /usr/share/misc/config.sub x86_64-linux
x86_64-pc-linux-gnu
$ /usr/share/misc/config.sub djgpp
i586-pc-msdosdjgpp
$ /usr/share/misc/config.sub mingw32
i686-pc-mingw32
$ /usr/share/misc/config.sub vaxv
vax-dec-sysv
对于没有内核和/或操作系统的目标,还有一些变体,例如arm-none-eabi
,,x86_64-pc-elf
甚至x86_64-pc-none
。
这些配置名称用于描述构建目标,并且在交叉编译(但不仅限于)时常见。它们可以用作许多configure
选项的参数,也可以用作构建工具的前缀;因此,x86_64-linux-gnu-gcc
GCC 正在为x86_64-linux-gnu
.
它们的构造有点神秘,可能会导致冗长的辩论...