バイナリがリンクされているライブラリを見つける

バイナリがリンクされているライブラリを見つける

ソフトウェアがリンクされているライブラリとそれぞれのバージョンを一覧表示するコマンドがあることは知っています。

ld または libtool に関するものですか?

でも、どうしても思い出せません。Google で少し時間をかけましたが、役に立つものは何も見つかりませんでした。

アップデート
ldd <binary>Linuxでは役立つでしょう、(から@エルネリotool -L <binary>) ですが、MacOS X でも同様のことが行われることがわかりました。

答え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 つあります。バージョンについて質問されました。どちらも「どのバージョンか」という質問には答えませlddreadelf。探しているライブラリのファイル名は教えてくれますし、命名規則にバージョン情報が含まれている場合もありますが、これを強制するものはありません。シンボルはバージョン管理されている可能性があり、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

関連情報