什么是应用程序二进制接口(ABI)?
我从不清楚什么是ABI。请不要将我指向Wikipedia文章。如果我能理解的话,我就不会在这里发表如此冗长的文章。 这是我对不同接口的看法: 电视遥控器是用户和电视之间的接口。它是一个现有的实体,但是它本身是无用的(不提供任何功能)。电视机上实现了遥控器上每个按钮的所有功能。 接口:是该功能的functionality和之间的“现有实体”层 consumer。接口本身不执行任何操作。它只是调用后面的功能。 现在,取决于用户是谁,有不同类型的界面。 命令行界面(CLI)命令是现有的实体,使用者是用户,而功能却在后面。 functionality: 我的软件功能可以解决我们描述此界面的某些目的。 existing entities: 命令 consumer: 用户 图形用户界面(GUI)窗口,按钮等是现有的实体,而使用者又是用户,功能又在后面。 functionality: 我的软件功能解决了我们描述此接口时遇到的一些问题。 existing entities: 窗口,按钮等。 consumer: 用户 应用程序编程接口(API)函数(或更准确地说)(在基于接口的编程中)接口是现有的实体,此处的使用者是另一个程序,而不是用户,并且功能仍在该层后面。 functionality: 我的软件功能解决了我们描述此接口时遇到的一些问题。 existing entities: 函数,接口(函数数组)。 consumer: 另一个程序/应用程序。 应用程序二进制接口(ABI)这就是我的问题所在。 functionality: ??? existing entities: ??? consumer: ??? 我已经用不同的语言编写了软件,并提供了不同种类的界面(CLI,GUI和API),但是我不确定是否提供过任何ABI。 维基百科说: ABI涵盖了诸如 数据类型,大小和对齐方式; 调用约定,它控制如何传递函数的参数以及如何检索返回的值; 系统调用号以及应用程序应如何对操作系统进行系统调用; 其他ABI标准化细节,例如 C ++名称修改 异常传播,以及 相同平台上的编译器之间的调用约定,但不需要跨平台兼容性。 谁需要这些细节?请不要说操作系统。我知道汇编编程。我知道链接和加载的工作方式。我确切地知道里面发生了什么。 …