ソフトウェアがリンクされたライブラリとそれぞれのバージョンを一覧表示するコマンドがあることを知っています。
Ldまたはlibtoolで何か?
しかし、私は覚えていません。グーグルでしばらく過ごしたが、有用なものを思い付かなかった。
更新ldd <binary>
はlinuxで役に立ちます、( from @ Ernelli )私はそれを見つけましたotool -L <binary>
はMacOS Xでも同様のことを行います。
Lddを試すbinary-exec
例:
~$ 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)
直接必要なものを見つけるには:
readelf -d APP | grep NEEDED
ldd
は、他の場所で述べたように、すべての直接および間接のライブラリ(実行時に必要なすべて)を表示します。 dlopen()で動的に開くことができるため、これは完全なリストではない可能性がありますが、これは99%の時間で機能するはずです。
ldおよびlibtoolは、コンパイル/リンク時に使用されます。あなたがアプリを持っていると、それらは役に立ちません。
[〜#〜] edit [〜#〜] OSXについて質問していた回答を後で見ることができますが、Linuxツールの回答に追加したいと思います。
かなり前に、言及し忘れていたことが1つあります。あなたはバージョンについて尋ねました。 ldd
もreadelf
も「バージョン」の質問には答えません。彼らはあなたが探しているライブラリのファイル名を教えてくれます、そして命名規則はいくつかのバージョン情報を持っているかもしれませんが、これを強制するものは何もありません。シンボルはバージョン管理されている可能性があり、これらを表示するにはnm
を使用してさらに低いレベルに設定する必要があります。
もう1つの方法は、objdumpを使用することです。
objdump -x "binary" |必要なgrep
これは、このバイナリにのみ必要なすべての依存関係を示しています。非常に便利。