abi-compliance-checker中的扩展选项用于什么?

时间:2017-08-09 16:08:25

标签: c++ c abi

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

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

  

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

即使尝试使用和不使用选项检查ABI,我仍然不太了解含义选项以及它如何改变我得到的结果。

以下是我没有选项的结果摘录:

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的角度来看输出的差异是什么意思?

1 个答案:

答案 0 :(得分:1)

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

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

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

看起来-extended选项暂时无法正常工作。我们需要解决它。