![バイナリがリンクされているライブラリを見つける](https://rvso.com/image/1263781/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%81%8C%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B.png)
答え1
lddを試すバイナリ実行
例:
~$ ldd /bin/bash
linux-gate.so.1 => (0x00606000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
/lib/ld-linux.so.2 (0x00a41000)
答え2
直接必要なものを見つけるには:
readelf -d APP | grep NEEDED
ldd
他で述べたように、実行時に必要なすべての直接および間接ライブラリが表示されます。dlopen() を使用して動的に開く場合もあるため、完全なリストではないかもしれませんが、99% の確率で動作するはずです。
ld と libtool はコンパイル/リンク時に使用されます。アプリが完成したら役に立ちません。
編集後の回答から OSX について質問していたことがわかりますが、Linux ツールに関する回答に追加したいと思います。
かなり前に言い忘れたことが 1 つあります。バージョンについて質問されました。どちらも「どのバージョンか」という質問には答えませldd
んreadelf
。探しているライブラリのファイル名は教えてくれますし、命名規則にバージョン情報が含まれている場合もありますが、これを強制するものはありません。シンボルはバージョン管理されている可能性があり、nm
これらを確認するには、さらに低いレベルのものについて多くのことを知る必要があります。
答え3
別の方法としては、objdump を使用することです。
objdump -x "binary" | grep が必要
これは、このバイナリにのみ必要なすべての依存関係を表示します。非常に便利です。
答え4
のその他の回答重要な点を見逃す:
共有ライブラリは直接リンクされている、または間接的に別のライブラリを介してリンクされています。
のみ直接リンク:
objdump --private-headers "${bin}" | grep 'NEEDED' | cut --delimiter=' ' --fields=18-
のために全て:
ldd "${bin}" | cut --fields=2 | cut --delimiter=' ' --fields=1 | rev | cut --delimiter='/' --fields=1 | rev | sort --unique --version-sort