Anacondaでdebian(jessie)に基づいたdockerコンテナにrJavaをインストールしようとしています。
ルートとして、私はやった
$ apt-get update && apt-get install -y --no-install-recommends \
default-jdk default-jre libicu-dev
それから
$ R CMD javareconf
Java interpreter : /usr/lib/jvm/jdk1.8.0_121/jre/bin/Java
Java version : 1.8.0_121
Java home path : /usr/lib/jvm/jdk1.8.0_121
Java compiler : /usr/lib/jvm/jdk1.8.0_121/bin/javac
Java headers gen.: /usr/lib/jvm/jdk1.8.0_121/bin/javah
Java archive tool: /usr/lib/jvm/jdk1.8.0_121/bin/jar
trying to compile and link a JNI program
detected JNI cpp flags : -I/usr/lib/jvm/Java/include -I/usr/lib/jvm/Java/include/linux
detected JNI linker flags : -L$(Java_HOME)/jre/lib/AMD64/server -ljvm
gcc -std=gnu99 -I/opt/conda/lib/R/include -DNDEBUG -I/usr/lib/jvm/Java/include -I/usr/lib/jvm/Java/include/linux -I/opt/conda/include -fpic -I/opt/conda/include -c conftest.c -o conftest.o
conftest.c:1:17: fatal error: jni.h: No such file or directory
#include <jni.h>
^
compilation terminated.
/opt/conda/lib/R/etc/Makeconf:133: recipe for target 'conftest.o' failed
make: *** [conftest.o] Error 1
Unable to compile a JNI program
Java_HOME : /usr/lib/jvm/jdk1.8.0_121
Java library path:
JNI cpp flags :
JNI linker flags :
Updating Java configuration in /opt/conda/lib/R
Done.
ただし、jni.hはJDKに含まれています。
# find /usr/lib/jvm/jdk1.8.0_121/ -name jni.h
/usr/lib/jvm/jdk1.8.0_121/include/jni.h
javareconf
が見つけているようには見えません。また、Java_HOMEなど、javareconfで設定できるすべての変数を見ると、適切なインクルードを必要とするJNI cppフラグを設定する機能がありません。
Rは別の場所を見ています:
detected JNI cpp flags : -I/usr/lib/jvm/Java/include -I/usr/lib/jvm/Java/include/linux
同様の問題が発生しましたが、jdkをインストールした後はすべて問題ありません。
Sudo apt-get install openjdk-8-jdk
同じ問題がありました。 Javaフォルダーへのパスを指定することで修正されました。簡単に言うと、Javaをインストールした後、次のような行が表示されることがあります。
update-alternatives: using /usr/lib/jvm/Java-9-openjdk-AMD64/bin/jar to provide /usr/bin/jar (jar) in auto mode
次のように、javareconfを呼び出すときに、そのパスをJava_HOME引数として指定しました。
Sudo R CMD javareconf Java_HOME=/usr/lib/jvm/Java-9-openjdk-AMD64/bin/jar
これが役に立つことを願って
Java-configファイルを編集して問題を解決しました
Sudo nano /usr/lib/R/etc/javaconf
set the correct Java_HOME in this row:
: ${Java_HOME=/usr/local/Java/jdk-9.0.1}
すでにJava 11をubuntu 18.04にインストールしていましたが、このガイドに従ってjdk-11.0.1をインストールする必要がありました: https://websiteforstudents.com/how-to-install-Oracle- Java-jdk-11-on-ubuntu-18-04-16-04-18-10 /
次に、@ Spanska FortevaのようにjavaconfでJava_HOMEを変更しました
Sudo nano /usr/lib/R/etc/javaconfIn javaconf
Javaの古いバージョンへのパスがまだ指定されていることがわかりました。
## Versions from settings when configure was run
: ${Java_HOME=/usr/lib/jvm/default-Java}
: ${Java_CPPFLAGS=~autodetect~}
: ${Java_LD_LIBRARY_PATH=~autodetect~}
: ${Java_LIBS=~autodetect~}
Java_HOMEへのパスを新しくインストールしたjdkに変更しました。
: ${Java_HOME=/usr/lib/jvm/jdk-11.0.1}
次に、jni.hへのパスを指定してCMDを実行しました。
Sudo R CMD javareconf /usr/lib/jvm/jdk-11.0.1/include/jni.h
最後のビットは必要ないかもしれませんが、とにかくそのフォルダを見ることができるはずですが、それは私がやったことです。
ここで答えが確認されたかどうかはわかりませんが、私はみんなにこれを指摘します 記事 アンドリュー・コリアー.
彼が推奨するもの:
(1)すべてのリポジトリの更新
Sudo apt update -y
(2)JREとJDK 8がインストールされていることを確認する
Sudo apt install -y openjdk-8-jdk openjdk-8-jre
(3)次に、多くのユーザーがすでに言っているように、RをJavaにJDK 8への明示的なパスを指定して)
Sudo R CMD javareconf Java_HOME=/usr/lib/jvm/Java-8-openjdk-AMD64/
特定のJavaパッケージは、/ includeディレクトリ内に必要なすべてのコンパイル済みコンテンツが含まれている限り、重要ではありません。
user@laptop:~$ ls /usr/lib/jvm/Java-8-openjdk-AMD64/include/
classfile_constants.h jdwpTransport.h jvmticmlr.h linux
jawt.h jni.h jvmti.h
これについての詳細は、jni.hを見つける方法?このディレクトリを正しく検索/コンパイルするために。
同じ問題があり、最終的に修正できました。多くの検索の後、これは私のために働いた(私は基本的にここのガイドに従った: https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html ):
このために私は走った:
$ Sudo update-alternatives --install "/usr/bin/Java" "Java" "/usr/Java/jdk1.8.0_201/bin/Java" 1
$ Sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/Java/jdk1.8.0_201/bin/javac" 1
$ Sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/Java/jdk1.8.0_201/bin/javaws" 1
に続く
$ Sudo update-alternatives --set Java /usr/Java/jdk1.8.0_201/bin/Java
$ Sudo update-alternatives --set javac /usr/Java/jdk1.8.0_201/bin/javac
$ Sudo update-alternatives --set javaws /usr/Java/jdk1.8.0_201/bin/javaws
その後、最終的に私のJava
Sudo update-alternatives --config Java
ここで、新しくインストールしたJavaを選択しました。それから私は走った
Sudo R CMD javareconf Java_HOME=/usr/Java/jdk1.8.0_201/bin/
ここでJava jdkパスを明示的に指定しました。これが正常に終了した後、glmultiをインストールするために必要なrstudioをrstudioにインストールすることができました。
私の場合、私は走らなければなりませんでした
R CMD javareconf
su
のように、Sudo
だけでは機能しませんでした。