(linux) 実行ファイル実行時に参照する共有ライブラリを見つけれないときの対処

実行ファイルを実行すると
「cannot open shared object file: ~ – xxxxx.so (LoadError)」

「relocation error: symbol not found」
と、共有ライブラリやらシンボルが見つからないと怒られるときの対処方法。この事象は、
rpmパッケージを無理矢理インストールしたときや、
どこかの製品をインストールしたとき
に発生する可能性大。

とりあえず、lddコマンドで実行するコマンドが使用する共有ライブラリ(ダイナミックリンクライブラリ)の依存関係を調べる。

# ldd /usr/local/hoge/bin/hoge
hoge1.so => /usr/local/hoge/lib/hoge1.so (0x0000008000030000)
hoge2.so => /usr/local/hoge/lib/hoge2.so (0x0000008000148000)

ここで、
・右側に表示されたライブラリのパスに該当のファイルが存在している場合
 →バージョン違いの共有ライブラリがキャッシュされている可能性(この時たぶんsymbolエラーになっているはず)
 または共有ライブラリがキャッシュされていない(この時はたぶん見つからないエラー)
 →下記の対処方法を参照

・左側に表示されたファイル名が右側のパスと異なるディレクトリにある

 →共有ライブラリのあるディレクトリがライブラリキャッシュの対象となっていない
  →下記の対処方法を参照

・左側に表示されたファイル名のファイルがどこにもない
 →そもそも必要な共有ライブラリがインストールされていない
 (rpm -i –force で無理矢理入れたな。もしや製品の前提条件読んでないな。)
  →先に前提条件のパッケージを入れろ!

・対処方法
 ライブラリ検索リストを確認。
 該当の共有ライブラリが存在するディレクトリが登録されていなければ登録する。
 # vi /etc/ld.so.conf
/usr/local/hoge/lib

 共有ライブラリを更新(リンク再作成・キャッシュ)
 # ldconfig

ちなみに、現在キャッシュおよびリンクされている共有ライブラリの一覧は
# ldconfig -l
で確認できる。

わからなければ以下の本を参考にしてもいいかも(キーワード検索なので的外れの場合もあります)
わからなければ以下の本を参考にしてもいいかも(機械検索なので的外れの場合もあります)

(linux) 実行ファイル実行時に参照する共有ライブラリを見つけれないときの対処” への1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です