ABI、EABI、OABI、GNU EABI

ABI、EABI、OABI、GNU EABI

  应用二进制接口(Application Binary Interface,ABI)定义了一个系统中函数的参数如何传送、如何接受函数返回值、数据类型的大小、布局和对齐、应用程序应如何对操作系统进行系统调用、对象文件,程序库等的二进制格式等细节。ABI 允许编译好的目标代码在使用兼容 ABI 的系统中无需改动就能运行。

  嵌入式应用程序二进制接口 (Embedded Application Binary Interface,EABI) 指定嵌入式软件程序的文件格式、数据类型、寄存器用法、堆栈帧组织和函数参数传递的标准约定,以便与嵌入式操作系统一起使用。广泛使用的 EABI 有 PowerPC、Arm EABI、MIPS EABI。

  在很多地方有 GNU EABI 的这样的叫法,例如,在 ARM 提供的 GNU 工具链中有 arm-none-linux-gnueabi 的命名。这里的 GNU EABI 其实就是 EABI。之所以叫这个名字是因为 GNU 一贯作风是要求带有 GNU 字样。例如 GNU 要求把 Linux 称为 GNU/Linux,但是实际情况大家都直接叫 Linux。

  OABI (其中的 O,理解为 Old 或 Obsolete)是 ARM 系列的最开始使用的应用程序二进制接口。OABI 假设 CPU 拥有一个浮点单元处理器(实际很多没有),导致编译器生成的程序总是尝试与浮点单元通信以进行浮点运算,由于没有浮点运算单元,内核出现异常,异常机制会自动再使用软件模拟浮点进行计算,这导致了一些额外开销。

  EABI 被创造出来以解决 OABI 的这个问题。但是,EABI 没有简单的方法来让二进制发行版同时支持软浮点和硬浮点,因此,ARM 的交叉编译器分为 ARMEL 和 ARMHF 这两种。因此,有个 arm-none-linux-gnueabihf 表示支持硬浮点。

posted on   zxddesk  阅读(162)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示