LoginSignup
6
5

More than 1 year has passed since last update.

共通ライブラリがみつからない(cannot open shared object file)エラー対処方法

Last updated at Posted at 2021-09-17

環境

  • Ubuntu Linux 20.04 (AWS)

用語

  • 本記事では「共通ライブラリ = shared object file = soファイル = *.so」 としている

トラブル

  • shared libraries のパスを設定しているにも関わらず、ライブラリがみつからないという旨のエラーが発生
  • 以下、エラーメッセージ(アプリケーションに依存したメッセージかもしれない)
error while loading shared libraries: *.so: cannot open shared object file: No such file or directory

Ubuntu が shared libraries を探すパスの確認方法

  • パスの一覧を以下のコマンドで確認
cat /etc/ld.so.conf.d/*
  • 以下は実行結果
  • /etc/ld.so.conf.d/ に、共通ライブラリのパスを書いたconfファイルを保存する仕組みのようだ
  • アプリは、このフォルダ内にあるconfファイルに書かれたパスをもとに soファイルを探すというようになる
# libc default configuration
/usr/local/lib
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

Ubuntu が shared libraries を探すパスの設定方法

  • 新規にパスを書いた conf ファイルを作成
vim /etc/ld.so.conf.d/additive_path.conf
  • 以下は、ファイルの内容
/etc/ld.so.conf.d/additive_path.conf
/usr/lib64

トラブル(再確認)

  • additive_path.conf*.so があるパスを書いて保存しているにも関わらず、*.soファイルがないというエラーが発生

解決方法

  • 以下のコマンドを実行
  • shared libraries のパスが反映されて、Ubuntuがライブラリを発見することができた
  • キャッシュが効くかもしれないので再起動が必要かもしれない、とのこと(筆者の環境では、再起動しても反映されず、 ldconfig 実行直後にパスが反映された
sudo ldconfig

理由

  • 32ビットと64ビットのアーキテクチャを1つのシステムで実現できるようにしていて、それを実現するために ldconfig コマンドを実行する必要がある、ということのようだ(よくわかっていない)

付録

  • 以下の環境変数でも、ライブラリのパスを設定できる
export LD_LIBRARY_PATH=/usr/lib64
  • LD は、 LOAD または LOADER の略のようだ

参考

6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5