API有效运行是否需要ABI



有一个程序使用Java、C++和C编写的API。您需要描述ABI才能使这些API有效运行吗?

据我所知,ABI在API的较低级别上充当API。(ABI用于定义二进制代码的不同组件如何为给定的操作接口给定体系结构上的系统(

我对此不太确定。如果我错了,请更正我,并提供API是否需要ABI才能运行的详细信息。

有一个程序使用Java、C++和C编写的API。您需要描述ABI才能使这些API有效运行吗?

ABI只涵盖了底层机制,比如参数是如何传递的(在CPU寄存器中,在堆栈上(和一些其他细节(堆栈对齐要求,哪些寄存器被"被调用者保存",哪些被调用者丢弃,等等(。ABI并不关心函数的作用

API恰恰相反——它只关心函数的作用(程序员如何使用高级语言中的API(,而不关心低级机制(参数如何传递等(。

示例是任何可移植的开源库(zlibc、SDL、OpenSSL、GMP(或任何标准化API(OpenGL、MPI,是您使用的语言的一部分的标准库(;其中API是相同的,而不管编译器恰好使用哪个ABI。

一个反例是固件接口(例如UEFI(,其中相同的规范描述了API和ABI(主要是因为当你想用不同的"首选"ABI安装不同的操作系统时,你不能只是重新编译和重新安装固件(。

注意:因为Java主要使用JIT,所以它没有"JIT"的概念;ABI";(或者,"ABI"是JVM之外什么都不知道的内部实现细节(,用Java编写的代码不能被用其他语言编写的代码调用。有一些特殊的余量(Java Native Interface(允许Java软件通过调用本机代码。无论本机代码使用什么ABI。

如果我错了,请更正我,并提供API运行是否需要ABI的详细信息。

从技术上讲,API运行需要某种ABI,只是通常情况下你不关心它是哪种ABI(类似地,执行高级语言源代码需要某种机器代码,但你很少有理由关心它是哪个CPU的机器代码(。

相关内容

  • 没有找到相关文章