R CMD javareconf找不到jni.h

我正在尝试在基于debian(jessie)和Anaconda的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  ^ 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找到它。 而且,如果我查看我可以使用javareconf设置的所有变量,比如JAVA_HOME,我看不到设置JNI cpp标志的能力,这需要正确的包含。

我已经在互联网上看到过这个问题的各种 post ,但没有解决方案。

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}