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

标签 c++ shared-libraries

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

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

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


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

最佳答案

尝试 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

关于c++ - 检查共享库是否与二进制文件兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775838/

相关文章:

c++ - 异常安全蹦床的设计模式

c++ - 打印二叉树 - C++

linux - 在 Unix 中使用静态库的更好做法?

c++ - 如何将 Unix 库添加到 Visual Studio 进行交叉编译?

linux - dlopen 不尊重 `RTLD_LOCAL` ?

c++ - QuickFIX Initiator 无法发送消息

c++ - 如何将值从 python 传递给 C++ 并返回?

c++ - VC9下SQLite3的麻烦

c++ - 没有扩展名的Linux可执行文件的共享库(.so)之间的区别?

c++ - 我可以从运行时加载的共享对象访问主机进程的符号吗?还有其他选择吗?