检查共享库是否与二进制文件兼容?

时间:2015-11-18 09:12:30

标签: c++ shared-libraries

背景:我有一个大型项目,它连接了数十个共享库,包括外部源和我们自己的项目。在交付新软件版本之前,我通常会make clean all并推出项目附带的所有可执行文件和共享库。

现在有时客户更喜欢只运送可执行文件,例如对于热修复,因为他们的法规要求在更改库时测试所有受影响的功能,这意味着一切。

问题: 确定可执行文件是否与一组共享库兼容的最简单方法是什么?

编辑:我当前的方法是“如果libs的标题没有改变它将是兼容的”,但这是一个容易出错的方法,我宁愿检查可执行文件和库本身。

2 个答案:

答案 0 :(得分:1)

libabigail项目包含用于检查二进制兼容性的工具,Binary compatibility issues with C++是一组很好的规则。

答案 1 :(得分:1)

试试abi-compliance-checker。它是检查库版本的二进制兼容性的工具。自2009年开发。

如果您在某处可以获得库的调试信息,那么您也可以尝试abi-dumper

# Create ABI dumps from debug info
abi-dumper libSample-1.0.so.debug -o ABI-1.0.dump
abi-dumper libSample-2.0.so.debug -o ABI-2.0.dump

# Compare ABI dumps
abi-compliance-checker -l libSample -old ABI-1.0.dump -new ABI-2.0.dump