どのようにコンパイルされたライブラリ内に含まれる利用可能な機能などを一覧表示するのでしょうか?

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

質問

私は関数がコンパイルされたライブラリ内の関数をライブラリ内に存在する、またはリスト出ているかどうかを判断するにはどうすればよい?

役に立ちましたか?

解決

あなたは静的にシンボルを一覧表示する 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 "あなたのライブラリ"

それはあなたが必要以上に印刷されます - だけでなく、関数名が、全体のシンボルテーブル。あなたが得るシンボルのさまざまな属性をチェックして、あなたは、変数やものから機能を整理することができるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top