API 和 ABI 简而言之

API AND ABI in a nutshell

请无法用简单的词弄清楚什么是 API 和 ABI(请不要使用维基百科定义),它们是内核的一部分吗?它们是函数吗?他们做什么?

API 应用程序编程接口

这意味着程序员用来编写程序的函数和 类。一个库提供的函数和类就是它的API.

ABI 应用程序二进制接口。

这是编译程序后函数和 类 在内存中布局的低级方式。将已编译程序的一部分链接到已编译库或已编译程序的另一部分需要以相同的方式布置各个部分,以便一切都正确地组合在一起。

一个API是一个应用程序编程接口。它为不同的源代码级软件组件提供了一种相互通信的方式。

API 的一个示例是库的头文件,它指定库提供的一组函数以及如何调用它们。例如,在 C++ 中:

//external_library.h
//Processes your data and writes the results to outputlog.txt
void ProcessMyData (std::string data);

这告诉使用 external_library 的程序员他们可以调用名为 ProcessMyData 的函数。此函数不接收 std::string、returns 任何内容,并且(如果文档是最新的)将结果写入 outputlog.txt.


ABI 是一个应用程序二进制接口。它为二进制组件提供了一种标准的方式来与平台和彼此进行通信。

ABI 的一个示例是 System V ABI。这指定了各种细节,例如函数调用约定、二进制数据表示、目标文件格式、加载、链接等。您可以阅读 AMD64 处理器的 SysV ABI 草案 here 以了解其内容。