カテゴリ: Linux 更新日: 2026/07/10

lddコマンドの使い方を徹底解説!Linuxの依存ライブラリを確認する基本技術

Linuxのlddコマンドとは?依存ライブラリ確認コマンド
Linuxのlddコマンドとは?依存ライブラリ確認コマンド

先生と生徒の会話形式で理解しよう

生徒

「Linux(リナックス)でプログラムを動かそうとしたら、共有ライブラリが足りないというエラーが出てしまいました。どうすれば調べられますか?」

先生

「それは困りましたね。そんな時はldd(エルディーディー)コマンドを使えば、そのプログラムがどのライブラリを必要としているか一目で分かりますよ。」

生徒

lddですか?難しそうな名前ですが、初心者でも使いこなせますか?」

先生

「仕組みはシンプルです。依存関係(イゾンカンケイ)という、プログラム同士のつながりを確認するだけですから。具体的な使い方を一緒に見ていきましょう。」

Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。

試して理解 Linuxのしくみを見る

※ Amazonアソシエイト広告リンク

1. lddコマンドとは?

1. lddコマンドとは?
1. lddコマンドとは?

lddコマンドは、Linuxにおいて実行ファイルが必要としている共有ライブラリを表示するためのコマンドです。読み方はldd(エルディーディー)といいます。これは「List Dynamic Dependencies(リスト・ダイナミック・ディペンデンシーズ)」の略称で、直訳すると「動的依存関係の一覧」という意味になります。

Linuxの多くのプログラムは、自分自身ですべての機能を持っているわけではありません。他のプログラムと共通で使える部品である「共有ライブラリ(キョウユウライブラリ)」を呼び出して動いています。例えば、文字を画面に出す機能や、ネットワーク通信をする機能などは、外部のライブラリに頼っています。この「頼っている状態」を依存関係(イゾンカンケイ)と呼びます。

lddを使えば、特定のコマンドがどのファイルをライブラリとして読み込んでいるのか、またそのファイルがシステム上のどこに配置されているのかを瞬時に確認できるため、トラブルシューティングには欠かせないツールです。

2. 共有ライブラリの役割と重要性

2. 共有ライブラリの役割と重要性
2. 共有ライブラリの役割と重要性

共有ライブラリ(キョウユウライブラリ)とは、複数のアプリケーションで共通して利用される便利なプログラム集のことです。Windows(ウィンドウズ)の世界では「DLL(ディーエルエル)」と呼ばれているものに相当します。Linuxでは、一般的にファイル名の末尾が「.so」で終わる形式になっています。これは「Shared Object(シェアード・オブジェクト)」の略です。

なぜライブラリを共有するのでしょうか。それは、メモリの節約と開発の効率化のためです。もしすべてのプログラムが同じ機能を自前で持っていたら、ディスク容量を無駄に消費してしまいます。共有ライブラリという「共通の道具箱」を用意しておくことで、プログラム本体のサイズを小さく保つことができるのです。

しかし、プログラムを実行する際に、この「道具箱」が見つからないと、プログラムは「そんなファイルはありません」とエラーを出して止まってしまいます。これを解決するために、lddコマンドで中身をチェックする作業が必要になります。

3. lddコマンドの基本的な使い方

3. lddコマンドの基本的な使い方
3. lddコマンドの基本的な使い方

まずは最も基本的な使い方を確認しましょう。使い方は非常に簡単で、lddの後に調べたい実行ファイルのパスを指定するだけです。一般ユーザー権限で実行できるので、システムを壊す心配もありません。

例えば、私たちが普段よく使うls(エルエス)コマンドが、どのようなライブラリに依存しているか調べてみましょう。


ldd /usr/bin/ls
    linux-vdso.so.1 (0x00007ffeeb9f4000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3a8b2f0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3a8b000000)
    libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f3a8b250000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3a8b350000)

実行結果には、左側にライブラリ名、右側にそのライブラリが実際に存在するシステムのフルパスが表示されます。一番右側の括弧内の数字は、メモリ上のアドレスを示しています。もしライブラリが見つからない場合は、ここに「not found(ノット・ファウンド)」と表示されます。

4. 出力結果の読み方をマスターしよう

4. 出力結果の読み方をマスターしよう
4. 出力結果の読み方をマスターしよう

lddの出力にはいくつかのパターンがあります。初心者の方が特に注目すべきは、矢印(=>)の記号です。これは「プログラムが探している名前 => 実際にシステムで見つかった場所」という意味を持っています。

例えば、libc.so.6(リブシー)というライブラリは、ほとんどのC言語で作られたプログラムが必要とする標準ライブラリです。これが正常にリンクされているかは非常に重要です。以下の例では、cat(キャット)コマンドの依存関係を確認しています。


ldd /usr/bin/cat
    linux-vdso.so.1 (0x00007fff555fe000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8b9e400000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8b9e650000)

表示されているlinux-vdso.so.1は、システムコールを高速化するためにカーネルが提供する仮想的なライブラリで、実際のファイルとしては存在しません。また、最後に表示されるld-linuxは「ダイナミックリンカ(ダイナミックリンカ)」と呼ばれるもので、他のライブラリを読み込む役割を持つ特別なプログラムです。

5. ライブラリが見つからない時のトラブル解決

5. ライブラリが見つからない時のトラブル解決
5. ライブラリが見つからない時のトラブル解決

自作したプログラムや、外部からダウンロードしたバイナリファイルを実行しようとして「error while loading shared libraries(エラー・ホワイル・ローディング・シェアード・ライブラリーズ)」というメッセージが出た場合、lddの出番です。

もしライブラリが不足していると、次のような表示になります。


ldd ./my_program
    linux-vdso.so.1 (0x00007ffca839e000)
    libtest.so => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2a1c600000)

このように「not found」と出た場合は、そのライブラリがシステムにインストールされていないか、インストールされていてもパス(保存場所の情報)が通っていないことを意味します。この問題を解決するには、ライブラリを適切なディレクトリに配置するか、LD_LIBRARY_PATH(エルディー・ライブラリ・パス)という環境変数を設定して、読み込み先を教えてあげる必要があります。

6. 詳細情報を確認するオプション機能

6. 詳細情報を確認するオプション機能
6. 詳細情報を確認するオプション機能

lddコマンドには、より詳しく調べたい時のためのオプションが用意されています。特によく使われるのが、未使用の依存関係を表示する機能や、詳細なシンボル情報を出す機能です。しかし、初心者のうちは、すべてのライブラリを表示する-v(バーボーズ)オプションを覚えておくと便利です。

-vオプションを使うと、ライブラリのバージョン情報なども詳しく表示されます。これにより、バージョンが古すぎて動かないといった問題の特定が可能になります。


ldd -v /usr/bin/grep
    linux-vdso.so.1 (0x00007ffd31dfd000)
    libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f45c8100000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f45c7e00000)

    Version information:
    /usr/bin/grep:
    libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
    libpcre2-8.so.0 (LIBPCRE2_8_0) => /lib/x86_64-linux-gnu/libpcre2-8.so.0

通常の表示よりも情報量が多くなりますが、「Version information」という項目を見ることで、どのバージョンのライブラリが要求されているかが分かります。

7. ldd実行時の注意点とセキュリティ

7. ldd実行時の注意点とセキュリティ
7. ldd実行時の注意点とセキュリティ

lddコマンドを使う上で、一つだけ知っておくべき重要な注意点があります。それは、信頼できない実行ファイルに対して不用意にlddを実行しないということです。

実はlddは、対象のプログラムを安全な環境で一部実行しようとする性質があります。そのため、悪意のあるプログラム(ウイルスなど)に対して実行すると、ライブラリを確認するだけのつもりが、その不正なコードが実行されてしまう危険性がゼロではありません。

もし提供元が不明なファイルを安全に調べたい場合は、objdump(オブジェクトダンプ)やreadelf(リードエルフ)といった、ファイルを「実行」せずに中身のテキスト情報だけを解析するコマンドを使うのが、中級者以上のセオリーです。普段使いの標準的なコマンドを調べる分には、全く問題ありませんので安心してください。

8. システム全体のライブラリ管理を支える仕組み

8. システム全体のライブラリ管理を支える仕組み
8. システム全体のライブラリ管理を支える仕組み

Linuxには、ライブラリを効率よく探すための「キャッシュ」という仕組みがあります。/etc/ld.so.conf(設定ファイル)やldconfig(エルディーコンフィグ)というコマンドがそれにあたります。

新しいライブラリをインストールした直後は、システムがまだその存在を認識していないことがあります。そんな時はルートユーザーでキャッシュを更新します。


ldconfig
    (何も表示されませんが、内部でライブラリのリストが更新されます)

lddで「not found」が出たけれど、確かにファイルは存在するという場合は、このldconfigを実行することで解決することが多いです。このように、lddは単独で使うだけでなく、システムの設定と組み合わせて活用される重要なコマンドなのです。

LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。

Linux教科書 LPICレベル1 スピードマスター問題集を見る

※ Amazonアソシエイト広告リンク

まとめ

まとめ
まとめ

Linuxシステムを安定して運用し、アプリケーションの実行エラーを迅速に解決するためには、lddコマンドの習得が欠かせません。本記事では、実行ファイルが依存している共有ライブラリ(Shared Object)を確認する方法から、トラブルシューティングの肝となる「not found」への対処法まで詳しく解説しました。

lddコマンドの重要ポイント再確認

lddコマンドは、単にファイルの一覧を表示するだけではありません。システムがどのようにプログラムをメモリ上に展開し、どのパスにあるライブラリを優先的に読み込んでいるかを可視化します。これにより、ライブラリのバージョン競合や、誤ったディレクトリからの読み込みといった、目に見えにくい問題を特定できるのです。

依存関係の可視化

プログラムが動作するために必須な「.so」ファイルの配置場所を瞬時にリストアップします。開発環境と本番環境の差異を調べる際にも有効です。

トラブル解決の鍵

「error while loading shared libraries」というエラーに直面した際、どの部品が欠けているのかを「not found」表示で具体的に示してくれます。

実践的な活用シーンとコマンド例

実際の開発現場やサーバー構築において、lddはどのように使われるでしょうか。例えば、特定の共有ライブラリが正しくリンクされているかを、パイプ処理とgrepを組み合わせて効率的に抽出することがよくあります。


# 特定のライブラリ(例: libc)が含まれているかだけを素早く確認
ldd /usr/bin/python3 | grep libc
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8b9e400000)

また、ライブラリのパスを一時的に通して動作確認を行う場合は、LD_LIBRARY_PATHという環境変数を利用します。以下のサンプルは、カレントディレクトリにあるカスタムライブラリを認識させてからプログラムを検証する際の手順です。


# 独自のライブラリディレクトリを追加してlddで確認する例
export LD_LIBRARY_PATH=/home/user/my_libs:$LD_LIBRARY_PATH
ldd ./my_application

プロフェッショナルな運用のために

Linuxエンジニアとして一歩先へ行くためには、lddの結果を受けて「どうシステムを修正するか」という判断力が求められます。共有ライブラリの検索パスは、主に以下の優先順位で決定されます。

  • 実行ファイルに埋め込まれた RPATHRUNPATH
  • 環境変数 LD_LIBRARY_PATH で指定されたディレクトリ
  • /etc/ld.so.cache に保存されているキャッシュ情報(ldconfigで更新)
  • デフォルトのシステムディレクトリ(/lib や /usr/lib など)

もしライブラリをインストールしたのに認識されない場合は、sudo ldconfigを実行してキャッシュを更新することを忘れないでください。この一連の流れを理解しておくことで、Linux上のソフトウェア管理が劇的にスムーズになります。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!lddコマンドを使ってみたら、足りなかったライブラリの名前がバッチリ表示されました。not foundって出てくるので、何が原因か一目瞭然ですね。」

先生

「それは良かったです。エラーメッセージだけで悩むよりも、まずはlddで中身を覗いてみるのが解決への近道ですよ。矢印の先のパスが正しいかどうかもチェックしましたか?」

生徒

「はい!実は全然違う古いバージョンのディレクトリを見に行っていたみたいです。環境変数のLD_LIBRARY_PATHを設定し直したら、ちゃんと正しいパスを指すようになりました。」

先生

「素晴らしいですね。環境変数は一時的な確認に便利ですが、恒久的に直したい場合は/etc/ld.so.conf.d/に設定ファイルを追加して、ldconfigを叩くという手順も覚えておくといいでしょう。」

生徒

「なるほど、キャッシュの更新ですね。あ、あと注意点にあったセキュリティのことも気をつけます。知らないサイトから落としてきた怪しいファイルにいきなりlddするのは控えるようにします。」

先生

「その通りです。安全が確認できないバイナリには、readelf -dを使って静的に依存関係を調べるという上級テクニックもあります。基本はlddで十分ですが、常に慎重に作業することが、優れたLinux管理者の条件ですよ。」

生徒

「勉強になります!これで依存関係のエラーが出ても怖くありません。どんどんコマンドを使いこなせるようになりたいです!」

関連記事:
カテゴリの一覧へ
新着記事
New1
Linux
Linuxのストレージとは?HDDやSSDなどデータ保存装置の仕組みを初心者向けに解説
新規投稿
New2
基本情報技術者試験
HTMLとは?初心者でもわかるWebページ作成の基礎と仕組みをやさしく徹底解説!
更新記事
New3
基本情報技術者試験
主キーとは?データベースの基本を初心者向けにやさしく解説
更新記事
New4
Linux
Linuxのスタティックリンクとは?ライブラリを実行ファイルに組み込む静的リンクを初心者向けに解説
新規投稿
人気記事
No.1
Java&Spring記事人気No1
基本情報技術者試験
イーサネット(Ethernet)とは?初心者にもわかるLANの基本技術をやさしく解説
No.2
Java&Spring記事人気No2
基本情報技術者試験
DHCP
239
DHCPとは?初心者でもわかるIPアドレス自動割り当ての仕組み
No.3
Java&Spring記事人気No3
基本情報技術者試験
NIC
224
NICとは何か?初心者にもわかるネットワークインターフェースカードの基本
No.4
Java&Spring記事人気No4
基本情報技術者試験
CPU
211
CPUとは何かを完全解説!初心者でもわかるコンピュータの頭脳の仕組み
No.5
Java&Spring記事人気No5
基本情報技術者試験
IPv4
126
IPv4とは?初心者でもわかるIPアドレスの基本と通信のルール
No.6
Java&Spring記事人気No6
基本情報技術者試験
16進数とは?初心者にもわかる意味・読み方・変換方法をやさしく解説!
No.7
Java&Spring記事人気No7
基本情報技術者試験
HTTP
110
HTTPとは?初心者にもわかりやすく仕組みを解説!Webの基本を学ぼう
No.8
Java&Spring記事人気No8
基本情報技術者試験
SMTP
109
SMTPとは?初心者でもわかるメール送信の仕組みとプロトコルをやさしく解説!