カテゴリ: Linux 更新日: 2026/06/08

/etc/ld.so.confとは?Linuxで共有ライブラリの検索パスを設定・追加する方法を初心者向けに解説

Linuxの/etc/ld.so.confとは?共有ライブラリ検索パス設定ファイル
Linuxの/etc/ld.so.confとは?共有ライブラリ検索パス設定ファイル

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

生徒

「Linuxで新しいソフトをインストールしたのに、実行しようとするとエラーが出て動かないんです。ライブラリが見つからないとか何とか……。」

先生

「それは『共有ライブラリ』がどこにあるか、システムが把握できていないのかもしれませんね。」

生徒

「共有ライブラリ(キョウユウライブラリ)?システムに場所を教える必要があるんですか?」

先生

「その通りです。Linuxには共有ライブラリを探しに行くための『名簿』のような設定ファイルがあるんですよ。それが /etc/ld.so.conf です。」

生徒

「そのファイルを編集すれば、エラーが直るかもしれないってことですね!詳しく教えてください!」

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

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

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

1. /etc/ld.so.confとは?読み方と役割を解説

1. /etc/ld.so.confとは?読み方と役割を解説
1. /etc/ld.so.confとは?読み方と役割を解説

/etc/ld.so.conf は、読み方は /etc/ld.so.conf(スラッシュ・エトセ・エルディー・ドット・ソー・ドット・コンフ) といいます。Linuxシステムにおいて、プログラムが動作するために必要な共有ライブラリ(Shared Library)を探す場所を記録した設定ファイルです。

Linuxのアプリケーションの多くは、自分一人で全ての機能を動かしているわけではありません。共通して使う機能(文字を表示する、ネットワークに繋ぐなど)は、外部の部品である「共有ライブラリ」として切り離されています。プログラムが起動する瞬間に、システムは「この部品はどこにあるかな?」と探しに行きます。その探しに行くルートを指示しているのが、このファイルなのです。

イメージとしては、図書館の「蔵書検索システム」のようなものです。本(ライブラリ)がどこの棚(ディレクトリ)にあるかをあらかじめ登録しておかないと、司書さん(システム)は本を見つけることができません。/etc/ld.so.conf は、まさにその「棚の場所」をリストアップした書類に当たります。

2. 共有ライブラリの基礎知識と拡張子「.so」の意味

2. 共有ライブラリの基礎知識と拡張子「.so」の意味
2. 共有ライブラリの基礎知識と拡張子「.so」の意味

共有ライブラリ(キョウユウライブラリ)とは、複数のプログラムから共通して利用される便利なプログラム集のことです。Windowsでは DLL(ディーエルエル) と呼ばれるものに相当します。Linuxでは、これらのファイルには .so(エスオー) という拡張子がついています。これは Shared Object(シェアード・オブジェクト) の略です。

なぜ「共有」するのかというと、メモリの節約やアップデートの効率化のためです。一つのライブラリを多くのアプリで使い回せば、それだけパソコンの部品である 主記憶装置(シュキオクソウチ:メモリ) の消費を抑えられます。また、不具合があった際も、ライブラリファイルを一つ差し替えるだけで、それを使っている全てのアプリが最新の状態になります。

しかし、新しく自分でプログラムをビルド(構築)したり、特殊な場所にソフトウェアをインストールしたりすると、標準的な場所(/lib や /usr/lib)以外にこの .so ファイルが置かれることがあります。その際に /etc/ld.so.conf の設定が必要になるのです。

3. /etc/ld.so.confの中身を確認してみよう

3. /etc/ld.so.confの中身を確認してみよう
3. /etc/ld.so.confの中身を確認してみよう

まずは、自分のパソコンの /etc/ld.so.conf がどうなっているか確認してみましょう。このファイルはテキスト形式なので、cat コマンドで簡単に中身を見ることができます。


cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

最近の多くのLinuxディストリビューション(UbuntuやCentOSなど)では、ファイルの中に直接パス(フォルダの場所)を書くのではなく、上記のように include という命令が書かれていることが多いです。これは「/etc/ld.so.conf.d/ というディレクトリの中にある .conf ファイルを全部読み込んでね」という意味です。

このように設定を小分けにすることで、管理がしやすくなっています。例えば、新しくデータベースソフトを入れたら、その専用の設定ファイルを /etc/ld.so.conf.d/db.conf のように作成して追加するだけで済むからです。

4. 共有ライブラリの検索パスを追加する手順

4. 共有ライブラリの検索パスを追加する手順
4. 共有ライブラリの検索パスを追加する手順

特定の場所に保存されたライブラリを認識させたい場合、新しい設定ファイルを /etc/ld.so.conf.d/ の中に作成するのが一般的です。例えば、/usr/local/custom/lib という場所に新しいライブラリを置いたとしましょう。この場所をシステムに教える手順は以下の通りです。

まず、管理者権限を使って新しい設定ファイルを作成します。ファイル名は分かりやすく custom.conf としましょう。


echo "/usr/local/custom/lib" > /etc/ld.so.conf.d/custom.conf
cat /etc/ld.so.conf.d/custom.conf
/usr/local/custom/lib

これで「場所」を名簿に書き込みました。しかし、これだけではまだシステムは新しい設定を読み込んでいません。Linuxには、この名簿を元に「高速検索用のデータベース」を作る仕組みがあるからです。次に紹介するコマンドで、そのデータベースを更新する必要があります。

5. ldconfigコマンドで設定を反映させる

5. ldconfigコマンドで設定を反映させる
5. ldconfigコマンドで設定を反映させる

設定ファイルを書き換えたら、必ず ldconfig(エルディーコンフィグ) というコマンドを実行しなければなりません。このコマンドは、/etc/ld.so.conf/etc/ld.so.conf.d/ の内容を読み取り、/etc/ld.so.cache(スラッシュ・エトセ・エルディー・ドット・ソー・ドット・キャッシュ) というバイナリ形式の高速検索用キャッシュファイルを更新します。

システムがライブラリを探す際、いちいちテキストファイルである設定ファイルを読み直していると時間がかかってしまいます。そのため、ldconfigを使って「あらかじめ検索しやすい形式にまとめておく」のです。この操作には 特権階級(トッケンカイキュウ) である root(ルート)権限が必要です。


ldconfig
(何も表示されなければ成功です)

このコマンドを忘れると、いくら設定ファイルを正しく書いても「ライブラリが見つからない」というエラーが消えません。設定変更と ldconfig はセットで覚えるのが Linuxの基本です。

6. 現在認識されているライブラリを確認する方法

6. 現在認識されているライブラリを確認する方法
6. 現在認識されているライブラリを確認する方法

システムが現在、どのライブラリをどの場所から読み込んでいるかを確認するには、ldconfig コマンドに -p オプションをつけて実行します。これにより、キャッシュ(/etc/ld.so.cache)に登録されているライブラリの一覧が表示されます。


ldconfig -p | head -n 10
1067 libs found in cache `/etc/ld.so.cache'
    libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1
    libyaml-0.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libyaml-0.so.2
    libxml2.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libxml2.so.2
    libwebpmux.so.3 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwebpmux.so.3
    libwebp.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwebp.so.6

このように、ライブラリ名とそれに対応する実体のパスが表示されます。もし特定のプログラムが動かないときは、このリストに目的のライブラリが含まれているか、意図したパスを指しているかをチェックすることで、トラブルシューティング(不具合解決) が可能になります。

7. アプリが依存しているライブラリを調べるlddコマンド

7. アプリが依存しているライブラリを調べるlddコマンド
7. アプリが依存しているライブラリを調べるlddコマンド

特定のアプリケーションや実行ファイルが「どの共有ライブラリを必要としているか」を調べるには、ldd(エルディーディー) コマンドを使います。これは List Dynamic Dependencies(リスト・ダイナミック・ディペンデンシーズ) の略です。

例えば、基本的なコマンドである ls がどのライブラリを使っているか見てみましょう。


ldd /bin/ls
    linux-vdso.so.1 (0x00007ffebf1f8000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3c1a2e8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3c1a0f6000)
    libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f3c1a062000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3c1a34a000)

結果の中で => の右側が空欄になっていたり、not found と表示されていたりする場合は、そのライブラリが /etc/ld.so.conf で指定されたパスの中に見つからないことを意味します。これが原因でプログラムが起動できないのです。lddコマンドは、初心者が「なぜかソフトが動かない」という壁にぶつかった時の強力な味方になります。

8. 環境変数LD_LIBRARY_PATHによる一時的なパス追加

8. 環境変数LD_LIBRARY_PATHによる一時的なパス追加
8. 環境変数LD_LIBRARY_PATHによる一時的なパス追加

システム全体の設定ファイルである /etc/ld.so.conf を書き換える勇気がない時や、一時的にテストしたい時は、環境変数(カンキョウヘンスウ) を使う方法もあります。それが LD_LIBRARY_PATH(エルディー・ライブラリ・パス) です。

この変数にパスを指定すると、システムは /etc/ld.so.conf よりも優先してその場所を検索します。ただし、これはそのターミナルのセッションを閉じると無効になります。設定方法は以下の通りです。


export LD_LIBRARY_PATH=/home/user/mylib:$LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH
/home/user/mylib:

開発中の自作ライブラリを試す際などは便利ですが、恒久的な設定には向いていません。本番環境や常に使うソフトの場合は、やはり /etc/ld.so.conf に正しく登録し、ldconfig を実行するのが正攻法です。Linuxのディレクトリ構成やパスの概念に慣れてくると、これらの使い分けがスムーズにできるようになります。

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

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

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

まとめ

まとめ
まとめ

Linuxシステムを効率的かつ安定して運用するためには、共有ライブラリ(Shared Library)の適切な管理が欠かせません。本記事で解説した/etc/ld.so.confは、システムがプログラム実行時に必要な部品(.soファイル)をどこから探し出すかを決定する、いわば「ライブラリ検索の羅針盤」とも言える重要な設定ファイルです。

共有ライブラリ管理の重要ポイント

Linuxにおけるライブラリ管理の核心は、「設定の追加」と「キャッシュの更新」のサイクルにあります。標準的なディレクトリである/lib/usr/lib以外の場所に独自のライブラリをインストールした場合、システムは自動的にそれを見つけることはできません。そこで、以下の手順が必須となります。

  • 設定の分離: /etc/ld.so.conf.d/内に新しい.confファイルを作成し、パスを記述する。
  • 反映作業: sudo ldconfigコマンドを実行し、バイナリ形式のキャッシュファイル/etc/ld.so.cacheを再生成する。
  • 依存関係の確認: lddコマンドを用いて、実行ファイルが正しくライブラリをリンクできているか検証する。

実務で役立つトラブルシューティングの知識

システムエンジニアやインフラエンジニアとして活躍するためには、エラーが発生した際の切り分け能力が求められます。例えば、error while loading shared libraries: libexample.so: cannot open shared object file: No such file or directory というエラーに遭遇した際、まずはlddコマンドで依存関係を確認し、次にldconfig -pでキャッシュに登録されているかを確認するのが鉄則です。

また、LD_LIBRARY_PATHという環境変数の活用も重要です。これはシステム全体に影響を与えず、現在のシェルセッションのみでライブラリパスを上書きできるため、開発環境でのテストや、一般ユーザー権限でのアプリケーション実行に非常に便利です。ただし、セキュリティの観点から、本番環境での常用は避け、恒久的な設定は/etc/ld.so.confで行うのがベストプラクティスとされています。

サンプルプログラム:ライブラリ検索パスの自動追加スクリプト

運用を自動化するために、特定のディレクトリをライブラリ検索パスに追加し、設定を反映させる簡単なシェルスクリプトの例を紹介します。このスクリプトは、指定したパスが既に登録されているかを確認し、未登録の場合のみ設定を追加してldconfigを実行します。


#!/bin/bash

# 追加したいライブラリパス
NEW_LIB_PATH="/opt/custom_app/lib"
CONF_FILE="/etc/ld.so.conf.d/custom_app.conf"

# ルート権限のチェック
if [ "$(id -u)" -ne 0 ]; then
    echo "このスクリプトはsudo権限で実行してください。"
    exit 1
fi

# 設定ファイルが存在しない、またはパスが記述されていない場合に実行
if [ ! -f "$CONF_FILE" ] || ! grep -q "$NEW_LIB_PATH" "$CONF_FILE"; then
    echo "新しいライブラリパスを追加します: $NEW_LIB_PATH"
    echo "$NEW_LIB_PATH" > "$CONF_FILE"
    
    # 設定を反映させるためにldconfigを実行
    echo "ldconfigを実行してキャッシュを更新します..."
    ldconfig
    echo "設定が完了しました。"
else
    echo "指定されたパスは既に登録されています。"
fi

今後の学習ステップ

この知識を習得した後は、静的ライブラリ(.aファイル)共有ライブラリ(.soファイル)のビルド方法の違いや、コンパイル時のオプションである-L(ライブラリ検索パスの指定)と-l(ライブラリ名の指定)、さらには実行ファイル自体にパスを埋め込むrpathの概念について学習を深めることをお勧めします。これにより、Linuxにおけるプログラムのビルドから実行までのライフサイクルを完全に理解できるようになるでしょう。

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

生徒

「先生、ありがとうございました!/etc/ld.so.confの設定とldconfigの実行を試してみたら、あんなに悩んでいたライブラリのエラーが嘘みたいに消えて、無事にソフトが起動しました!」

先生

「それは素晴らしいですね!原因は何だったか、自分なりに整理できましたか?」

生徒

「はい!自分でビルドしたライブラリを/usr/local/lib/myappという特殊な場所に置いていたのに、システムにその場所を教えていなかったのが原因でした。設定ファイルを作ってからldconfigを叩くことで、システムが持っている『高速検索用キャッシュ』に登録されたんですね。」

先生

「完璧な理解です。ちなみに、lddコマンドは使ってみましたか?」

生徒

「使いました!not foundと出ていた項目が、設定後はちゃんとフルパスで表示されるようになったので、すごく達成感がありました。WindowsのDLLと同じような仕組みだと考えると、Linuxがぐっと身近に感じられます。」

先生

「その感覚は大切ですよ。ライブラリ管理はLinux運用の基礎ですが、非常に奥が深いです。今後はセキュリティ面や、複数のバージョンが混在する場合の対応なども学んでいくと、さらにスキルの高いエンジニアになれますよ。」

生徒

「ありがとうございます!次は環境変数のLD_LIBRARY_PATHも使いこなせるように、色々と実験してみたいと思います!」

関連記事:
カテゴリの一覧へ
新着記事
New1
情報セキュリティマネジメント試験
AESとは?初心者でもわかる現代暗号方式の基本と仕組みをやさしく解説
更新記事
New2
基本情報技術者試験
WWWとは?初心者でもわかるワールドワイドウェブの基本と仕組みをやさしく解説!
更新記事
New3
Linux
lsmodコマンドの使い方を完全ガイド!Linuxのカーネルモジュール一覧を確認する方法
新規投稿
New4
情報セキュリティマネジメント試験
ダークウェブとは?初心者でもわかる意味・仕組み・危険性をやさしく解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
基本情報技術者試験
イーサネット(Ethernet)とは?初心者にもわかるLANの基本技術をやさしく解説
No.2
Java&Spring記事人気No2
基本情報技術者試験
NIC
333
NICとは何か?初心者にもわかるネットワークインターフェースカードの基本
No.3
Java&Spring記事人気No3
基本情報技術者試験
DHCP
228
DHCPとは?初心者でもわかるIPアドレス自動割り当ての仕組み
No.4
Java&Spring記事人気No4
基本情報技術者試験
16進数とは?初心者にもわかる意味・読み方・変換方法をやさしく解説!
No.5
Java&Spring記事人気No5
基本情報技術者試験
CPU
154
CPUとは何かを完全解説!初心者でもわかるコンピュータの頭脳の仕組み
No.6
Java&Spring記事人気No6
情報セキュリティマネジメント試験
ソフトウェアとは何かを完全解説!初心者でもわかる基本と役割
No.7
Java&Spring記事人気No7
基本情報技術者試験
CGI
144
CGIとは?初心者でもわかるWebとプログラムのつながりを解説!
No.8
Java&Spring記事人気No8
基本情報技術者試験
ビット(bit)とは?デジタルデータの最小単位をわかりやすく解説