web-dev-qa-db-ja.com

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

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

Ldまたはlibtoolで何か?

しかし、私は覚えていません。グーグルでしばらく過ごしたが、有用なものを思い付かなかった。

更新
ldd <binary>はlinuxで役に立ちます、( from @ Ernelli )私はそれを見つけましたotool -L <binary>はMacOS Xでも同様のことを行います。

41
er4z0r

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)
45
Ernelli

直接必要なものを見つけるには:

readelf -d APP | grep NEEDED

lddは、他の場所で述べたように、すべての直接および間接のライブラリ(実行時に必要なすべて)を表示します。 dlopen()で動的に開くことができるため、これは完全なリストではない可能性がありますが、これは99%の時間で機能するはずです。

ldおよびlibtoolは、コンパイル/リンク時に使用されます。あなたがアプリを持っていると、それらは役に立ちません。

[〜#〜] edit [〜#〜] OSXについて質問していた回答を後で見ることができますが、Linuxツールの回答に追加したいと思います。

かなり前に、言及し忘れていたことが1つあります。あなたはバージョンについて尋ねました。 lddreadelfも「バージョン」の質問には答えません。彼らはあなたが探しているライブラリのファイル名を教えてくれます、そして命名規則はいくつかのバージョン情報を持っているかもしれませんが、これを強制するものは何もありません。シンボルはバージョン管理されている可能性があり、これらを表示するにはnmを使用してさらに低いレベルに設定する必要があります。

15
Rich Homolka

もう1つの方法は、objdumpを使用することです。

objdump -x "binary" |必要なgrep

これは、このバイナリにのみ必要なすべての依存関係を示しています。非常に便利。

9
Pranav