Rのいくつかのパッケージは、標準でUNIXに組み込まれているライブラリのほかに、いくつかのライブラリに依存しているものがある。
こういったものをインストールしようとすると、以下のようなエラーが出る。
Error: package or namespace load failed for ‘png’ in dyn.load(file, DLLpath = DLLpath, ...): 共有ライブラリ '/home/kimoton/src/R-3.5.1/library/png/libs/png.so' を読み込め ません:
インストールするパッケージに必要なライブラリが見当たりませんよーー
という意味。
以下のような関数を作る。
-iname
で指定することで大文字小文字を区別せず名前で検索する。
$ function findafile (){ find / -iname "$@" 2>/dev/null; }
これを、png.so
について実行
$ findafile png.so /usr/lib64/ImageMagick-6.7.8/modules-Q16/coders/png.so /usr/lib64/png.so
次に、libpng16.so.16
について実行
$ findafile libpng16.so.16
/usr/local/lib/libpng16.so.16
あるやないかい。
/lib
ディレクトリと/usr/lib
ディレクトリはデフォルトで含まれているが、
そのほかのディレクトリを共有ライブラリに含めたい場合には以下のような処理を取る必要がある。
1. 環境変数(LD_LIBRARY_PATH
)で指定
一時的に追加したい場合は以下。
$ export LD_LIBRARY_PATH=/usr/local/bin:$LD_LIBRARY_PATH
bashを起動するたびに設定したい場合は~/.bashrc
に書き込む。
この方法であれば他のユーザーに影響を与えることなく共有ライブラリを読み込むことができる。
2. /etc/ld.so.conf
で指定。
システム側のファイルになるため、このファイルをいじるにはルート権限が必要になる。
include ld.so.conf.d/*.conf /usr/local/lib ## ←追加
こっちの方法だと永続的かつ他のユーザーにも影響を与えるので注意。