2017-08-09 125 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選項現在不能按預期工作。我們需要修理它。