18

いくつかのツールとライブラリを含むコードベースで作業していて、そのようなコードベース内のコンポーネントを移植 (または復活) させたいとしますが、シンボルがさまざまなライブラリ内のどこにあるのかについての手がかりが失われるか、コード自体 (はい、改善されたドキュメントはそのような問題を回避できますが、非常に要求が厳しいです)。コードで使用されているシンボルを見つけることができるライブラリを見つけるための最速の方法は何ですか?

4

3 に答える 3

28

Linuxボックスを想定すると、ライブラリファイルに名前をリストするnmツールが助けになります。

次のように広範な検索を行うために使用できます: 最初に使用可能なすべてのライブラリを見つけることができます (追加するコンポーネントなしでプロジェクトが正常にコンパイルされていると仮定します)。次に、そのような検索をループで囲むことができます。検出されたすべてのライブラリで nm を呼び出します。次に、「U」参照(未定義のシンボル、別名シンボルが使用されている場所)を破棄するためにgrepする出力。以下を与える単一のbash行で:

for lib in $(find base_path -name \*.a) ; do echo $lib ; nm $lib | grep my_symbol | grep -v " U "   ; done

どこ:

  • base_path はコードベースのルートです
  • my_symbol は、探しているシンボルです

エコーは、見つかったすべてのライブラリのリストを生成します。これは、シンボルを保持していないライブラリの名前を出力するため、あまりきれいではありませんが、ライブラリへの直接参照を持つことがわかった最速の方法でした。

base_path/component/libA.a
0000000000000080 D my_symbol

いつもの容疑者が見つかりました。

于 2013-11-11T21:16:05.903 に答える