従来のライブラリの実装と、関連する公開されたヘッダー ファイルがあります。最近、公開されたヘッダー ファイルの一部の関数が、ライブラリの実装に対応する定義を持っていないことがわかりました。
そのような機能が他にもあるかどうかを確認したいと思います。ヘッダーに存在するすべての API をふるいにかけ、その定義があるかどうかを確認するよりも、これを行う簡単な方法はありますか?
従来のライブラリの実装と、関連する公開されたヘッダー ファイルがあります。最近、公開されたヘッダー ファイルの一部の関数が、ライブラリの実装に対応する定義を持っていないことがわかりました。
そのような機能が他にもあるかどうかを確認したいと思います。ヘッダーに存在するすべての API をふるいにかけ、その定義があるかどうかを確認するよりも、これを行う簡単な方法はありますか?
abi-compliance-checkerツールでABIダンプファイルを作成してみてください。
abi-compliance-checker -lib NAME -dump DESC.xml
DESC.xmlファイルは次のとおりです。
<version>
1.0
</version>
<headers>
/path(s)/to/headers
</headers>
<libs>
/path(s)/to/libraries
</libs>
SymbolInfo
結果のABIダンプファイルには、ヘッダーファイルで宣言されたシンボル()および共有ライブラリによってエクスポートされたシンボル()について必要な情報が含まれますSymbols
。
オプションを追加することにより、xml形式でABIダンプを生成することもでき--xml
ます。
すべての関数を呼び出してコンパイルを試みるヘッダーから C ソースを生成できます (Perl が最適です!)。リンカは、不足している関数について文句を言います。
私はctags
、ヘッダー ファイルから識別子のリストを生成するために使用する傾向があります。次にar
、emfar
またはelfdump
Unix またはlib.exe
Windows dumpbin.exe
(ここでの説明を参照) を使用して、ライブラリから識別子のリストをダンプしdiff
、2 つのリストを並べ替えます。
これが C の場合、次のようなことができます。
printf("", /* insert all functions here */);
への関数ポインタとしてそれらすべてを渡す必要がありますprintf
。存在しないものは、リンカー エラーとして表示されるはずです。
(C++ では、オーバーロードを明示的にリストする必要があるため、少し難しくなります。)