这不是很难打破的二进制向后兼容性的一个DSO/公共图书馆用C++interface.这就是说,是否有一个静态的分析工具,它可以帮助探测此类ABI断,如果有两套不同的标题的文件:这些先前的状态DSO和那些目前的国家(也许Dso也一样)?免费和商业产品的建议是受欢迎的。

如果它还可以发出警告的不良做法,例如内联的职能和拖欠功能的参数,在DSO接口,这将是巨大的。

有帮助吗?

解决方案

我假设你熟悉本教程:二进制兼容性问题与C ++ ,如果没有的阅读!

我听说过这个工具: http://ispras.linuxbase.org/index.php/ABI_compliance_checker ,但是从来没有测试或使用一种,所以没有意见。

另外这您可能感兴趣的:向下兼容创建库ABI使用升压

其他提示

abi-遵守的检查 -一个工具,用于检查后的二进制/源级的兼容性的共享C/C++库(DSO):

一个工具,用于检查后的二元和源级的兼容性C/C++图书馆。该检查工具的头文件和共用图书馆的旧版本和新版本,并分析改变在API和ABI(ABI=API+编译器ABI),可能会破坏进制和/或来源的兼容性:改变在要求叠,v表的变化,去除符号,名字段,等等。

enter image description here

i检查 -C口ABI/API检查:

一个工具,用于静态检查C口API和ABI的变化。所有的更改类声明可能会导致ABI变化应该检测,随着最API的变化。i检查的目的是为使用的与图书馆,作为一种防止艾漂移。

shlib-兼容性 -ABI兼容性检查共用图书馆与符号版本控制:

shlib-采用兼容矮调试的符号重新和比较的定义的出口 符号,包括功能的论点和结构类型。

你也可能感兴趣的 linux上跟踪器linux abi跟踪器 服务。他们都是由《遵守的检查工具。

记得在他们使用 GCC XML 用于测试二进制兼容性工作。基本上它是生成编译对象树的XML表示。从理论上说,如果XML是等价的,它们的二进制兼容性一直维持。

在唯一安全的方式做到这一点是使用C接口导出库。 A C ++库只用来编译它的一个编译器兼容。

我们的 C ++智能差分器工具而言比较两个源文件和报告的差异语言结构(标识符,表达式,语句,...)和合理的编辑动作(插入,删除,移动,复制,更换标识符,...)。

有没有直接回答这个问题,ABI,但它所提供的信息可能是非常有益的。在另一个答案讨论一个例子是来自的结构{A,B} 以<强>结构{B,A} 更改-的返回型。 SmartDifferencer将报告 被感动了。 (注:有规律的比较工具将报告包含结构定义了该行被改变,让你有种得到相同的信息,但SmartDifference会忽略空格/布局和评论,也改变,产生更少的噪音概念)。

什么没有这些工具将报告是一个typedef定义的变化,它是在另一头文件。但后来大概是一个比较会涉及所有的头文件。如果你不想手动做到这一点,任何工具在使用中必须包括基本完整的C ++语法分析器,名字解析,并且必须比较的声明等价。另一个海报建议几乎这个问题的答案:为等值比较GCCXML输出。我不知道多么容易的是在实践中;它不能仅仅是“是的文件,以相同的XML?”

ABI - 应用程序二进制接口归结为编译器翻译这些源代码转换为机器可识别的指令的方式。相同的源极线可被翻译成字节不同的流,在最终的程序。

运行在源代码的静态分析器将无法预测编译器将如何翻译。这一决定是在编译器或编码设置中进行。所以我不相信一个静态的分析将帮助你在这种情况下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top