一直以来一直难以区别二者...
ABI 指 App Binary Interface (和具体的编程语言无关,是二进制定义的)
API 指 App Programming Interface.
...More detailed by Claude Sonnet 3.7
ABI 与 API 的区别
API (应用程序编程接口)
- 定义:规定软件组件之间如何交互的接口规范
- 层级:源代码级别的接口
- 关注点:函数调用的方法、参数、返回值和异常处理
- 语言依赖:通常与特定编程语言绑定
- 变更影响:修改API需要重新编译,但不一定需要重新链接
ABI (应用程序二进制接口)
- 定义:规定二进制代码如何与其他系统组件交互的低级接口
- 层级:二进制/机器代码级别的接口
- 关注点:数据结构布局、调用约定、寄存器使用、系统调用编号等
- 平台依赖:与特定硬件架构和操作系统紧密相关
- 变更影响:修改ABI通常需要所有依赖组件重新编译和链接
核心区别
- API规定如何编写代码,ABI规定如何生成机器码
- API变化可能不影响ABI,而ABI变化通常导致二进制不兼容
- 跨语言调用需要兼容的ABI,而不仅是API
- 预编译库(如.dll、.so文件)依赖稳定的ABI才能保持兼容性
简单类比
API像是两个人用共同语言交流的规则,而ABI则是这些话如何被翻译成电信号并在设备间传输的协议。