Skip to main content

"ldd"コマンドでプログラムの共有ライブラリを探す

【初心者向け】Linux Mint 19.1 Tessa Xfce 古いPCにLinuxをインストールしよう#4 (六月 2026)

【初心者向け】Linux Mint 19.1 Tessa Xfce 古いPCにLinuxをインストールしよう#4 (六月 2026)
Anonim

使用 ldd コマンドを使用して、指定されたプログラムで必要とされる共有ライブラリを表示します。依存関係が見つからない場合の作業に役立ちます。コマンドには、欠落している関数とオブジェクトのリストもあります。

lddコマンドの構文

エラーを回避するために、lddコマンドの正しい構文を確認してください。

ldd オプション … FILE …

使用可能なlddコマンドスイッチを1つ以上使用し、 オプション 上記のコマンドで見つけてください:

--help |このヘルプを印刷して終了する --version |バージョン情報を印刷して終了する -d、--data-relocs |データの再配置を処理する -r、--function-relocs |プロセスデータと関数の再配置 -u、--unused |未使用の直接の依存関係を出力する -v、--verbose |すべての情報を印刷する

lddコマンドの使用方法

次のコマンドを実行して、プログラムに関する詳細情報を取得します。

$ ldd -v / path / to / program / executable

出力にはバージョン情報と共有ライブラリへのパスとアドレスが次のように表示されます:

$ ldd libshared.so linux-vdso.so.1 =>(0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2(0x00007ff1dfafe000)

SOファイルがまったく存在しない場合、欠落しているライブラリは次のコマンドを使用して見つけることができます。

$ ldd -d path / to / program

出力は次のようになります。

linux-vdso.so.1(0x00007ffc2936b000) /home/gary/demo/garylib.so => not foundlibc.so.6 => usr / lib / libc.so.6(0x00007fd0c6259000) /lib64/ld-linux-x86-64.so.2(0x00007fd0c65fd000)

lddが実際に実行する可能性があるため、信頼できないプログラムに対してlddコマンドを実行しないでください。代わりに、依存関係ツリー全体ではなく直接的な依存関係だけを示すより安全な方法を使用してください。

$ objdump -p / path / to / program | grepが必要です

アプリケーションへのパスを見つける方法

アプリケーションへのフルパスを指定する必要がある場合は、lddで依存関係を調べる必要があります。これはいくつかの方法で行うことができます。

たとえば、これがFirefoxのパスを見つける方法です:

$ find / -name firefox

しかし、findコマンドの問題は、実行可能ファイルがリストされているだけでなく、Firefoxがどこにあっても次のように表示されるということです。

  • /etc/skel/.mozilla/firefox
  • / home / cache / mozilla / firefox
  • /home//.mozilla/firefox
  • / usr / bin / Firefox
  • / usr / lib / Firefox
  • / usr / lib / Firefox / Firefox

このアプローチはやりすぎで、sudoコマンドを使用して特権を昇格させる必要があります。そうしないと、多くの権限拒否エラーが発生する可能性があります。

代わりにwhereisコマンドを使用してアプリケーションのパスを見つけるほうがずっと簡単です。

$ whereis firefox

今回は、出力は次のようになります。

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Firefoxの共有ライブラリを見つけるために今やっておかなければならないのは、次のコマンドを入力するだけです。

$ ldd / usr / bin / firefox

コマンドの出力は次のようになります。

linux-vdso.so.1(0x00007ffff8364000)libpthread.so.0 => /usr/lib/libpthread.so.0(0x00007feb9917a000)libdl.so.2 => /usr/lib/libdl.so.2(0x00007feb98f76000)libstdc ++。so.6 => /usr/lib/libstdc++.so.6(0x00007feb98bf4000)libm.so.6 => /usr/lib/libm.so.6(0x00007feb988f6000)libgcc_s.so.1 => /usr/lib/libgcc_s.so.1(0x00007feb986e0000)libc.so.6 => /usr/lib/libc.so.6(0x00007feb9833c000)/lib64/ld-linux-x86-64.so.2(0x00007feb99397000)

Linux-vdso.so.1はライブラリの名前で、16進数はライブラリがメモリにロードされるアドレスです。

他の多くの行で、=>記号の後ろにパスがあることがわかります。これは物理バイナリへのパスです。 16進数は、ライブラリがロードされるアドレスです。