1. ABI 解决什么问题
一个应用程序的运行,需要诸多相关的库文件来支撑的。在Windows当中的库文件是*.dll(动态链接库)而Linux当中的库文件是*.so(共享对象)。这样编写的程序,是不能跨平台的,为解决这样的问题,ABI应运而生(Application Binary Interface 应用程序二进制接口)。
2. ABI 是什么
每个操作系统都会为运行在该系统下的应用程序提供应用程序二进制接口(ABI)。ABI包含了应用程序在这个系统下运行时必须遵守的变成约定,一系列的系统调用和使用这些系统调用的方法,以及关于程序可以使用的内存地址和使用机器寄存器的规定。
3 . ABI不同于API
应用二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低层接口。
ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
ABI掩盖了各种细节,例如:调用约定(控制着函数的参数如何传送以及如何接受返回值);系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。