【问题标题】:What is the extended option in abi-compliance-checker used for?abi-compliance-checker 中的扩展选项有什么用?
【发布时间】:2017-08-09 16:08:25
【问题描述】:

abi-compliance-checker 是一个 perl 程序,可以检查 linux 上库的 ABI (https://lvc.github.io/abi-compliance-checker/)

该工具有一个-extended 选项,以下是手册中的说明:

如果您的库 A 应该被其他库 B 使用,并且您想控制 B 的 ABI,那么您应该启用此选项。该工具将检查所有数据类型的更改,即使它们未被库 A 中的任何函数使用。此类数据类型不是 A 库 ABI 的一部分,但可能是 B 库的 ABI 的一部分。 简短的方案是: 应用 C(损坏)-> lib B(损坏 ABI)-> lib A(稳定 ABI)

即使在尝试使用和不使用该选项检查 ABI 之后,我仍然不真正理解选项的含义以及它如何改变我得到的结果。

这是我没有选项的结果的 sn-p:

Test Results
Total Header Files  177
Total Libraries 1
Total Symbols / Types   96 / 57
Compatibility   100%

Added Symbols  1 
demangle.h, libtoolbox.so.16.0.0.27
namespace mdw
demangle ( std::__cxx11::string const& iMangledString )

Problems with Symbols, Low Severity  1 
BufferMgr.h
namespace toolbox
[+] kDefaultMaxBufferSize [data]  1 

这是激活选项后的结果:

Test Results
Total Header Files  177
Total Symbols / Types   158 / 375
Compatibility   99.8%

Added Symbols  2 
demangle.h
namespace mdw
demangle ( std::__cxx11::string const& iMangledString )

StaticInit.h
namespace toolbox
_SymbolDefinedInStaticInitOnly_StaticInit ( )

Removed Symbols  1 
StaticInit.h
namespace toolbox
_SymbolDefinedInStaticInitOnly ( )

Problems with Symbols, Low Severity  1 
BufferMgr.h
namespace toolbox
[+] kDefaultMaxBufferSize [data]  1 

是否有人能够解释此选项的含义,以及从 ABI 的角度来看输出的差异意味着什么?

【问题讨论】:

    标签: c++ c abi


    【解决方案1】:

    默认情况下,该工具会检查所分析二进制文件的导出符号所使用的数据类型(作为参数、返回值或参数或返回值的字段等)。默认情况下不检查未使用的数据类型。在-extended 模式下,该工具将检查所有数据类型,包括未使用的。

    在您的示例中,我看到扩展模式下选中符号的数量不同,但根据选项的描述应该是相同的。对我来说,检测添加/删除的 _SymbolDefinedInStaticInitOnly* 看起来像是工具中的回归错误。

    目前,-extended 选项隐式启用 -headers-only 选项,从而可以分析标头中的所有内联符号。我认为在这种情况下我们不应该启用 -headers-only 选项。

    看起来-extended 选项目前无法按预期工作。我们需要修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-11
      • 2011-08-17
      • 2017-01-28
      • 2015-05-17
      • 2011-04-05
      • 2012-08-11
      • 2012-01-27
      • 2014-02-02
      相关资源
      最近更新 更多