为什么工具链名称具有单独的OS和EABI字段。

时间:2015-10-04 06:35:51

标签: linux gcc toolchain abi crosstool-ng

例如。手臂未知-Linux的gnueabi 现在,一旦操作系统即Linux被修复,C库将被修复(GLibc),因此将遵循调用约定和遵循的ABI。第4场即ABI的要求是什么?工具链是否可以使用与底层操作系统和LIBC使用的ABI不同的ABI。在这种情况下,由所述工具链编译的库如何在OS上运行?

1 个答案:

答案 0 :(得分:4)

这或多或少是历史原因的问题,a.k.a the holy wars about the sacred operating system's name。你称之为"工具链名称"实际上被称为Target Triplet,正如它所暗示的那样,它有三个字段,而不是更多或更少。在您的示例中,字段为:

  • 机器/ CPU:ln -s /cygdrive/c/ /c
  • 供应商:arm
  • 操作系统:unknown

参考我已经面临的另一个参考示例:linux-gnueabi,用于hobbyist operating system development

  • 机器/ CPU:i686-elf-gcc
  • 供应商:i686-elf(隐含)
  • 操作系统:unknown(隐式;编译器实际上是freestanding cross compiler,用于开发operating system kernels,因此它输出的代码不需要底层操作系统,因为输出代码是操作系统本身!)。

这只是一个混乱的问题,因为字段可能(和)使用none字符,用于分隔字段。在您的情况下,操作系统被认为是-,也称为使用Embedded ARM ABI的Linux内核的GNU操作系统。 Linux内核has historically been one of the most portable pieces of software in the world,所以它可以移植到其他ARM ABI,尽管我只知道EABI ......