パスにlibが見つかりません

パスにlibが見つかりません

パス内のいくつかのライブラリに依存するプログラムを起動しようとしていますが、プログラムがファイルを見つけることができないと言います。

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、PERL5LIBPerlライブラリなど、すべて同じ構文(コロンで区切られたディレクトリのリスト)を使用するさまざまなパス変数があります。

ネイティブライブラリの場合、環境変数に記載されているかどうかにかかわらず、検索パスにシステムデフォルトライブラリがあります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_PATHDYLD_LIBRARY_PATH

関連情報