2017-08-09 222 views
1

ABI-合规性检查是一个Perl程序,可以运行在Linux检查库的ABI(https://lvc.github.io/abi-compliance-checker/abi-compliance-checker中的扩展选项用于什么?

该工具有一个-extended选项,这里是什么手册说一下吧:

如果你的库A应该被其他库B使用,并且你想控制B的ABI,那么你应该启用这个选项。该工具将检查所有数据类型的变化,即使它们未被库A中的任何函数使用。此类数据类型不是A库ABI的一部分,但可能是B库的ABI的一部分。 短期方案是: 应用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

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

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

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

看起来像-extended选项现在不能按预期工作。我们需要修理它。