個人的につまったので忘備録。
anaconda は Linux (Ubuntu 16.04)上でpyenvを使ってインストールしているという前提です。
$ conda create -c r r-irkernel # anaconda内にRのインストール
Rを起動してrJavaをインストールしようとするとエラーになる。
> install.packages("rJava") ... gcc -std=gnu99 -o libjri.so Rengine.o jri.o Rcallbacks.o Rinit.o globals.o rjava.o -shared -L/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server -ljvm -Wl,--export-dynamic -fopenmp -L/home/rnakato/.pyenv/versions/anaconda3-4.4.0/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm -liconv -licuuc -licui18n /usr/bin/ld: -liconv が見つかりません collect2: error: ld returned 1 exit status Makefile.all:38: ターゲット 'libjri.so' のレシピで失敗しました
-liconv を認識できずに色々苦労していたのだが、実はrJavaもcondaでインストールできることに気づいた。
$ conda install -c r r-rjava
だがRを起動してrJavaをロードすると libjvm.so がないという理由でエラーになる。
> library("rJava") Error : .onLoad は loadNamespace()('rJava' に対する)の中で失敗しました、詳細は: call: dyn.load(file, DLLpath = DLLpath, ...) error: 共有ライブラリ '/home/rnakato/.pyenv/versions/anaconda3-4.4.0/lib/R/library/rJava/libs/rJava.so' を読み込めません: libjvm.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません エラー: ‘rJava’ に対するパッケージもしくは名前空間のロードが失敗しました
手元の環境ではlibjvm.soは/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/amd64/server にあるので、LD_LIBRARY_PATH を通す。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/amd64/server
これでrJavaをロードできるようになりました。
なお、R CMD javareconf
を使う方法は手元の環境ではうまくいきませんでした。
8/15 追記
conda install -c r r-rjava でrJavaをインストールしても、
R内でinstall.package("rJava")すると再インストールが始まり、同様のエラーとなる。
そのためrJavaに依存しているxlsなどをインストールできないが、
library("rJava")でロードしてからインストールするとエラーなくインストールが完了する。