2012-02-27 9 views
1

Linuxには、.soライブラリのプロトタイプをリストするツール(コマンドのようなもの)がありますか?.soライブラリのプロトタイプをリストするツール

私はnmが私の必要性に近いことを発見しましたが、私が得たものは単なる記号です。

+0

"プロトタイプ"とはどういう意味ですか? –

+0

関数の宣言のような: 'int func(int、char []);' – xiaohan2012

+0

[this one]に関連しています(http://unix.stackexchange.com/questions/32805/tools-that-list-the-prototypes- in-so-library/32821#32821) – Coren

答えて

1

ライブラリーがCライブラリーの場合、そのライブラリー自体に関数のシグネチャーは含まれません。 .soライブラリが-g(プロダクションライブラリでは通常ではありません)によって有効にされたデバッグ情報でコンパイルされていない限り、これらはヘッダファイルにあります(ライブラリが与えるはずです)。

C++の場合でも、.soライブラリ(-gなし)には、関連するクラスの宣言が含まれていません。変更された名前は、クラス名または型名のみを参照します...

要するに、ライブラリのヘッダファイルが必要です。ほとんどのLinuxディストリビューションは、それらをライブラリ自体とは別にパッケージします。たとえば、Debian上ではlibjansson4パッケージ(.so共有ライブラリ、Janssonライブラリが好きなアプリケーションを実行する必要があります)とlibjansson-devパッケージ(Janssonライブラリのアプリケーション呼び出し関数を構築するのに便利な共有オブジェクトとヘッダファイルが含まれています)。 Debianはまた、libjansson-dbg(デバッグ情報またはライブラリのバリアント用)とlibjansson-doc(ドキュメント用)パッケージも提供しています。

1

かんたん回答:いいえ、できません(Cの場合)。

長い答え: あなたがONLY C++のためにそれらの名前として機能宣言はマングルさあるので、あなたは、「プロトタイプ」を得ることができます。マングリングは本当にスペースなしの文字、例えばの1つの文字列に(またはプロトタイプ必要であれば)関数全体の署名をコード意味:

マングルされた形である
CCertificate::GetInfo(Utils::TCertInfo&) const 

_ZZNK12CCertificate7GetInfoERN5Utils9TCertInfoEE8 

マングリングのためintoducedましたC++での関数のオーバーロード(同じ名前の関数ですが、パラメータの数や種類が異なります)。 Cでは、oveloadingがないので、関数は(共有ライブラリ内で)名前で識別されます(ではなく、)。

要約すると、共有ライブラリ内のすべての関数は、という名前でと識別されますが、C++の場合、これらの名前はマングルされた名前です。 Manglingは、機能シグネチャを表示できる追加の「副作用」を提供します(たとえば、nm -Cを呼び出す)。

希望に役立ちます。

関連する問題