3

例如。arm-unknown-linux-gnueabi 现在,一旦操作系统(即 Linux)被修复,C 库将被修复(GLibc),因此调用约定和遵循的 ABI 将被修复。第 4 个字段,即 ABI 分别有什么要求?工具链能否使用与底层操作系统和 LIBC 使用的不同的 ABI。在那种情况下,由上述工具链编译的库将如何在操作系统上运行?

4

1 回答 1

4

这或多或少是历史原因,也就是关于神圣操作系统名称的圣战。您所说的“工具链名称”实际上称为Target Triplet,顾名思义,它有三个字段,不多也不少。在您的示例中,这些字段将是:

  • 机器/CPU:arm
  • 小贩:unknown
  • 操作系统:linux-gnueabi

再举一个我已经遇到过的参考示例:i686-elf-gcc,它用于爱好者操作系统开发

  • 机器/CPU:i686-elf
  • 供应商:(unknown隐式)
  • 操作系统:(none隐式;编译器实际上是一个独立的 交叉编译器,用于操作系统内核的开发,因此它输出的代码不需要底层操作系统,因为输出代码是操作系统本身!)。

这只是一个混淆问题,源于字段可能(并且确实)使用-字符,该字符也用于分隔字段。在您的情况下,操作系统被认为是linux-gnueabiGNU 操作系统,其 Linux 内核使用嵌入式 ARM ABI。Linux 内核在历史上一直是世界上最便携的软件之一,因此预计它可以移植到其他 ARM ABI,尽管我只知道 EABI...

于 2015-10-04T06:53:12.767 回答