たくさんの.soファイルを使用するバイナリがあります。
bash-3.00$ file foo
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.21, dynamically linked (uses shared libs), not stripped
しかし、このファイルでlddを実行すると、バイナリが依存している.soファイルを取得できません。
bash-3.00$ ldd foo
not a dynamic executable
bash-3.00$
readelfは、バイナリで使用される共有ライブラリのリストを表示します。
bash-3.00$ readelf -d foo
Dynamic segment at offset 0x17c810 contains 70 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libdl.so.2]
この場合、lddがライブラリの依存関係を取得できないのはなぜですか?
コメントの1つにあるように、64ビットシステムでlddを使用して32ビットELFオブジェクトを検査しようとしました。 lddは標準のダイナミックリンカーを使用して依存関係をトレースするため、プラットフォームに検査対象のELFオブジェクトに必要なリンカーがない場合、lddは失敗します。 Readelfとobjdumpは、これらの状況でより堅牢です。
Fedora 21では、lddで32ビットの.soファイルを識別するために、以下をインストールする必要があることに注意してください。
Sudo yum install glibc.i686 libgcc.i686 libstdc++.i686 glibc-devel.i686
Lddで表示されていた「動的実行可能ファイルではない」エラーを修正したのはどれかわかりません。