パス内のいくつかのライブラリに依存するプログラムを起動しようとしていますが、プログラムがファイルを見つけることができないと言います。
11:45:27 ~ > echo $PATH
/usr/share/fsl/5.0/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/mri/Scripts:/home/mri/Scripts/MRI:/home/mri/Software/BRAINS3/bin:/home/mri/Software/BRAINS3/lib:/home/mri/Software/ITK_Build/bin:/home/mri/Software/ITK_Build/lib:/home/mri/Software/VTK_Build/bin:/home/mri/Software/VTK_Build/lib:/usr/lib/fsl/5.0
11:45:33 ~ > brains3
/home/mri/Software/BRAINS3/bin/brains3_real: error while loading shared libraries: libiplUtils.so: cannot open shared object file: No such file or directory
11:45:35 ~ > sudo find / -name libiplUtils.so
[sudo] password for mri:
/home/mri/Software/BRAINS3/lib/libiplUtils.so
この問題を解決する方法を知っている人はいますか?
答え1
環境変数を使用してライブラリ検索パスを指定できますLD_LIBRARY_PATH
。
$ export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
$ brains3
システム全体に対してこの変数を設定しないでください。ソフトウェアをシステム全体にインストールできない場合、またはインストールしたくない場合は、ラッパースクリプトを作成できます。
答え2
動的リンカーは、LD_LIBRARY_PATHからライブラリを検索します。
答え3
Unixシステムは、さまざまな種類のファイルをさまざまなディレクトリに分類する傾向があります。実行可能ファイル(例/usr/bin
)、ドキュメント(例:/usr/man
、、/usr/info
...)、基本ライブラリ(例/usr/lib
)、Perlライブラリ(例)などの/usr/lib/perl5
別々のディレクトリがあります。したがって、PATH
実行可能ファイル、MANPATH
マニュアルページ、LD_LIBRARY_PATH
基本ライブラリ1、PERL5LIB
Perlライブラリなど、すべて同じ構文(コロンで区切られたディレクトリのリスト)を使用するさまざまなパス変数があります。
ネイティブライブラリの場合、環境変数に記載されているかどうかにかかわらず、検索パスにシステムデフォルトライブラリがありますLD_LIBRARY_PATH
。 Linuxでは、これらのディレクトリが一覧表示され、/etc/ld.so.conf
常に/lib
検索/usr/lib
パスにあります。
したがって、いくつかの可能性があります。
- 追加されました(Linux固有の、他のUNIXバリアント
/home/mri/Software/BRAINS3/lib
にも/etc/ld.so.conf
同様のファイルがある可能性があります)。ldconfig
変更が適用されるように実行してください。 - 追加(すべてのユーザーが利用可能)または追加
export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
(自分だけが使用可能)。/etc/profile
~/.profile
ラッパースクリプトを作成します。
#!/bin/sh export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib exec /home/mri/Software/BRAINS3/bin/brains3 "$@"
/home/mri/Software/BRAINS3/lib
検索パスの他のディレクトリにあるライブラリへのシンボリックリンクを作成します。ln -s /home/mri/Software/BRAINS3/bin/brains3/lib*.so.* /usr/local/lib/
¹はほとんどのUnixバリアントで使用される名前ですが、Mac OS Xでは。 LD_LIBRARY_PATH
DYLD_LIBRARY_PATH