6

ELF特定のダイナミックリンクが実行に必要な.soをすべてC/C ++プログラムの内部から欠落していることを知るための簡単で効率的な方法はありますか?

システム内の(メット/アンメット)依存関係を見つけるためlddにを実行しようとせずに、とやや類似した機能を備えたプログラムが必要です。ELFおそらく、いくつかのライブラリを介してld-linux.soユーティリティに問い合わせますか?(私はLinuxのこの部分の初心者です=)

注:のソースコードを読むことはldd、私の意図にはあまり役立ちませんでした。ldd実際には、別のプロセスをフォークしてプログラムを実行しているようです。

プログラムを実行せずに依存関係が満たされていないことを知ることができない場合、少なくとも、ELFプログラム内からそのすべてに必要な.soをすばやくリストする方法はありますか?

よろしくお願いします=)

4

3 に答える 3

8

ld.so(8)に従って、環境変数LD_TRACE_LOADED_OBJECTSを空でない文字列に設定するとldd、(バイナリまたはライブラリを正常に実行する代わりに) のような結果が得られます。

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");
于 2009-10-05T16:26:39.593 に答える
1

機能を試しましたdlopenか?これを使用してダイナミックライブラリをロードできます(または、場合によっては、ライブラリをロードできるかどうかを確認できます)。

必要なライブラリのリストを作成するのはもっと難しいので、readelfソースhandle_dynamicで機能するようにしてください

于 2009-10-05T15:10:42.727 に答える