【发布时间】: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 的角度来看输出的差异意味着什么?
【问题讨论】: