API与ABI的区别

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我是linux系统编程新手,在阅读时遇到了api和abi。

空气污染指数的定义:

API定义了一个软件在源级与另一个软件通信的接口。

ABI的定义:

API定义源接口,ABI则定义特定体系结构上两个或多个软件之间的低级二进制接口。它定义了应用程序如何与自身交互,应用程序如何与内核交互,以及应用程序如何与库交互。

程序如何在源级进行通信?什么是源级?它与源代码有关系吗?或者库的源被包含在主程序中?

我所知道的唯一不同之处是API主要由程序员使用,ABI主要由编译器使用。

提问于
用户回答回答于

API是人类使用的。我们编写源代码。当我们编写一个程序并想要使用一些库函数时,我们编写如下代码:

 long howManyDecibels = 123L;
 int ok = livenMyHills( howManyDecibels);

我们需要知道有一种方法livenMyHills(),它接受一个长整数参数。因此,作为一个编程接口,它都是用源代码表示的。编译器将其转换为可执行指令,这些指令符合此语言在此特定操作系统上的实现。在这种情况下,在音频单元上产生一些低级操作。所以特定的比特和字节会在某些硬件上喷射出来。所以在运行时,有很多二进制级别的操作,我们通常看不到。

用户回答回答于

API:应用程序接口

这是从应用程序/库公开的公共类型/变量/函数集。

在C/C++中,这是在应用程序附带的头文件中公开的内容。

应用程序二进制接口

编译器就是这样构建应用程序的。

它定义了事物(但不限于):

  • 如何将参数传递给函数(寄存器/堆栈)。
  • 谁从堆栈中清除参数(调用方/被调用方)。
  • 其中返回值放置为返回。
  • 异常是如何传播的。

扫码关注云+社区