どのようにコンパイルされたライブラリ内に含まれる利用可能な機能などを一覧表示するのでしょうか?
質問
私は関数がコンパイルされたライブラリ内の関数をライブラリ内に存在する、またはリスト出ているかどうかを判断するにはどうすればよい?
解決
あなたは静的にシンボルを一覧表示する nmののコマンドを使用することができますライブラリます。
nm -g -C <libMylib.a>
他のヒント
ELFバイナリのために、あなたはreadelfが使用することができます:
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
:リストシンボル
-W
:あまりにも長い名前をカットしないでください。
awkコマンドは、すべての機能を除外します、とC ++ FILTは、それらをunmangleます。それは、彼らは人間が読める形式で表示されますので、それは内部命名スキームからそれらを変換することを意味します。これは、(boost.filesystem libにから取られた)このような名前を出力します:
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
C ++ filtとせずに、名前が
_ZN5boost9exceptionD0Ev
として表示されます マイクロソフトのツールについては、「link /dump /symbols <filename>
は」あなたに血みどろの詳細を与えるだろう。上場読みやすくを与えるために、おそらく他の方法(またはオプション)があります。
は、Linux / Unixの下には、指定されたオブジェクトに含まれるエクスポートされたシンボルを一覧表示するobjdump -T
を使用することができます。 Windows環境下でdumpbin
(IIRCのdumpbin /exports
)があります。 C ++の関数名はオーバーロードを可能にするために台無しにされていることに注意してください。
EDIT:codelogicの<のhref = "https://stackoverflow.com/questions/392142/how-would-you-list-the-available-functions-etc-contained-within-a-compiled-librを見た後#392148" >私のanwserはobjdumpのもデマングリングを実行するために、-Cを理解していることを覚えています。
このコマンドを使用します:
objdumpの-t "あなたのライブラリ"
それはあなたが必要以上に印刷されます - だけでなく、関数名が、全体のシンボルテーブル。あなたが得るシンボルのさまざまな属性をチェックして、あなたは、変数やものから機能を整理することができるようになります。