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

Check if shared libraries are compatible with a binary?

本文关键字:二进制文件 是否 共享 检查      更新时间:2023-10-16

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

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

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


编辑:我目前的方法是"如果库的头没有改变,它将是兼容的",但这是一种容易出错的方法,我宁愿检查可执行文件和库本身。

尝试abi合规性检查器。它是一个检查库版本的二进制兼容性的工具。自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

libabigail项目包含检查二进制兼容性的工具,C++的二进制兼容性问题是一组很好的规则。