【问题标题】:Check if shared libraries are compatible with a binary?检查共享库是否与二进制文件兼容?
【发布时间】:2015-11-18 09:12:29
【问题描述】:

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

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

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


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

【问题讨论】:

  • 1) 精心设计的界面 2) 测试
  • 欢迎来到 ABI 地狱。你不能真正可靠地测试这种东西。您需要保证共享库的 ABI 稳定性并认真注意这一点。
  • @KerrekSB 您能否就如何保证 ABI 稳定性提出建议?
  • sourceware.org/libabigail 包含检查二进制兼容性的工具,techbase.kde.org/Policies/… 是一套很好的规则
  • @JonathanWakely 谢谢你的链接。如果您将它们发布为答案,我会接受。

标签: c++ shared-libraries


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      相关资源
      最近更新 更多