检查共享库是否与二进制文件兼容
Check if shared libraries are compatible with a binary?
背景:我有一个大型项目,它链接了数十个共享库,这些库来自外部来源和我们自己的项目。在交付新软件版本之前,我通常会执行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++的二进制兼容性问题是一组很好的规则。
相关文章:
- 如果使用非公共类,vtable 是否会在二进制文件中持续存在?
- 是否可以在一个循环中写入多个二进制文件
- 如何检查二进制文件中是否存在字符串
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 模板类静态在最终二进制文件中跨共享库以不同方式实例化是否一致
- 如果在执行过程中替换二进制文件,"const"数组是否驻留在内存中?
- 将敏感数据存储在C 编译的二进制文件中是否安全
- 检查二进制文件中是否使用了提升
- 是否可以强制(比如“gcc”)为C和C++中相同的源代码生成相同的二进制文件
- 是否可以在为Solaris SPARC生成二进制文件的英特尔计算机上编写QT C++项目
- C++标准是否保证字符串文本完全存储在程序中 二进制文件.
- 编译C++二进制文件是否存储原始源代码
- 验证STL文件是否为ASCII或二进制文件
- 使用条带是否删除二进制文件上的RTTI信息
- 检查共享库是否与二进制文件兼容
- 如何在没有文件、objdump或gdb的情况下知道二进制文件是否包含调试符号
- 是否有任何方法可以知道二进制文件的特定部分是否在内存中
- 类型是否在最终二进制文件中公开?它们在符号文件和RTTI中可用吗?
- 是否有可能在Android中通过编译二进制文件生成本地缓冲区溢出来获得根访问权限?
- unix多次并行运行一个C++二进制文件是否存在问题