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

例如. arm-unknown-linux-gnueabi
现在,一旦操作系统(即Linux)被修复,C库将被修复(GLibc),因此调用约定和遵循的ABI也将被修复.第四字段(即ABI)的要求是什么?工具链可以使用与基础OS和LIBC使用的ABI不同的ABI吗?在那种情况下,由上述工具链编译的库将如何在OS上运行?

解决方法:

它或多或少是历史原因,也就是the holy wars about the sacred operating system’s name.您所称的“工具链名称”实际上称为Target Triplet,顾名思义,它具有三个字段,或多或少.在您的示例情况下,字段为:

>机器/ CPU:手臂
>供应商:未知
>作业系统:linux-gnueabi

再举一个我已经遇到的参考示例:i686-elf-gcc,用于hobbyist operating system development

>机器/ CPU:i686-elf
>供应商:未知(隐式)
>操作系统:无(隐含;隐式;编译器实际上是freestanding cross compiler,用于开发operating system kernels),因此它输出的代码期望没有底层OS,因为输出代码是OS本身!).

这只是一个混乱的问题,原因是这些字段可能(也确实)使用了-字符,该字符也用于分隔字段.在您的情况下,该操作系统被认为是linux-gnueabi,否则被称为GNU操作系统,其Linux内核使用Embedded ARM ABI.Linux内核has historically been one of the most portable pieces of software in the world,因此,尽管我只是将其移植到其他ARM ABI中,了解EABI …

上一篇:linux – 如何修改用于包开发的Buildroot包的源代码?


下一篇:在Android NDK工具链中使用LLVM有什么用?