ABI 一致性:
一个编译器对某个ABI一致, 如果他产生的代码满足所有的ABI规范. 一个库一致于一个ABI, 如果他是根据那个ABI实现的. 一个应用一致于ABI, 如果他是通过工具构建的,工具保证一致于ABI并且不包含源代码特化变化行为被ABI所定义.
调用惯例:
调用惯例是ABI的一个子集, 确定蚕食如何传递和函数结果如何返回.
互操作性:
不同的工具集是可互操作的, 如果他们产生的文件可以被相同的程序使用. 工具集合包括编译器, 汇编器, 连接器, 库, 头文件, 启动文件, 以及调试器. 二进制被不同的工具集生成, 是不可互相操作的, 如果他们没有实现相同的ABI. 这适用于不同版本的同样的工具, 以及不同开经销商的工具.
实现定义特征:
语言标准包括一系列实现定义的特这, 他的行为可能在不同实现件变化巨大. 一些特征通常被包含进平台的ABI, 但是其他没有. 未被包含特征通常影响程序行为, 不具有互相调用能力.
兼容性:
一致于同样的ABI, 并且有同样的实现定义的特征,都是与兼容性密切相关的.
application binary interface被c或c++编译器所实现, 将会影响代码生成, 运行时支持:
数据类型的大小, 对齐;
结构化类型的布局;
调用惯例;
寄存器使用惯例;
运行时算术支持接口;
目标文件格式;
另外, c或c++编译器实现的ABI也影响一下代码生成和运行时支持:
名字变化;
异常处理;
调用构造, 和解构;
布局, 对齐, 类填充;
布局, 对齐, 实表;
一些gcc编译选项引起编译器生成的代码与平台默认的ABI不一致. 另外一些选项引起不同的程序行为, 对于实现定义的特征未被ABI所包含. 这些选项是为了与其他编译器(未与平台ABI一致)兼容而给出的, 或者因为一些非常规的实现定义特征的行为. 应该注意这些选项.
大多数平台有良好的定义的ABI包含c代码,.
从gcc3.2开始, gcc二进制惯例对c++是基于书写的, 销售商中立的c++ABI, 设计用来于64为的Itaninum机器, 但是也包括同用到特征.
![](http://img.zemanta.com/pixy.gif?x-id=5d4567c2-8914-88d2-aa95-0a80e705fd53)
作者:liyonghelpme 发表于2010/6/10 13:44:00
原文链接
阅读:765 评论:1
查看评论