为什么应用程序二进制接口对编程很重要

the*_*tor 8 c c++ operating-system abi binary-compatibility

我不明白为什么ABI是开发用户空间应用程序的重要环境.是否将操作系统的系统调用集视为ABI?但是,如果是这样,那么关于标准库中封装的系统调用的所有复杂性是不是都很复杂?

那么ABI兼容性仅与在不同平台上运行静态链接应用程序相关,因为系统调用将嵌入到二进制文件中?

Kev*_*ose 8

ABI定义了一组对准的,调用所共有的一个系统惯例,和数据类型.如果您正在进行任何类型的动态链接,这使得ABI非常重要; 如果没有它,一个应用程序的代码无法调用另一个应用程序提供的代码.

所以不行.ABI兼容性与所有动态链接相关(静态不太相似).

值得再次强调的是,系统的ABI会影响应用程序间的工作以及应用程序到操作系统的工作.

  • 唯一众所周知的ABI是'C',它是为每个平台非常严格定义的.每个C++编译器都实现自己的ABI,因此来自不同编译器的目标代码通常不兼容."C"往往是Web上所有不同语言之间的绑定代码. (3认同)

Ben*_*bee 6

ABI不仅仅是可用的系统调用.它通常还描述了参数传递给函数的实际方式以及结构和对象在内存中的布局方式.如果没有一致的ABI,由不同的编译器构建的代码可能无法相互调用 - 如果你调用foo(a,b)并且一个编译器在堆栈上推送a和b而另一个编译器通过寄存器中的那些,你就得到了ABI冲突.