我正在尝试使用Anaconda将rJava安装在基于debian(杰西)的docker容器中。
作为根,我做到了
$ 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
正在找到它。而且,如果我查看所有可以用javareconf设置的变量,比如JAVA_HOME,我看不到设置JNICpp标志的能力,这需要正确的include。
我已经看到variousposts围绕互联网的这个问题,但没有解决方案。
8条答案
按热度按时间a7qyws3x1#
我不确定这里是否已经确认了答案,但我会向每个人指出Andrew Collier的article。
他建议:
(1)更新所有仓库
(2)确保安装JRE和JDK 8
(3)然后,正如许多用户已经说过的那样,将R指向Java,并显式地指向JDK 8
具体的Java包并不重要,只要它在/include目录中包含所有必要的编译内容。
关于这方面的更多信息,我建议使用 * how to make jni.h be found? * 来正确定位/编译这个目录。
gr8qqesn2#
R正在查看不同的位置:
我遇到了类似的问题,但安装JDK后一切都很好:
gg0vcinb3#
有同样的问题。通过指定Java文件夹的路径进行修复。简单地说,安装Java后,您可能会得到这样一行代码。
在调用javareconf时,我将该路径指定为JAVA_HOME参数,如下所示。
希望这是有用的
t5fffqht4#
我通过编辑java-config文件解决了这个问题
zpf6vheq5#
我已经在ubuntu 18.04上安装了Java 11,但必须按照以下指南安装jdk-11.0.1:https://websiteforstudents.com/how-to-install-oracle-java-jdk-11-on-ubuntu-18-04-16-04-18-10/
然后我在javaconf中更改了JAVA_HOME,就像@Spanska Forteva一样
我发现仍然指定了旧版本java的路径。
我将JAVA_HOME的路径更改为新安装的jdk:
然后使用指定的jni. h路径运行CMD:
最后一点可能不需要,它应该能够在该文件夹中寻找无论如何,但这就是我所做的。
x6yk4ghg6#
有同样的问题,终于可以解决了。经过大量的搜索,这对我起作用了(我基本上遵循了这里的指南:https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html):
为此,我跑了:
后面跟着
然后我终于可以在
在这里我选择了新安装的Java。然后我就跑了
在其中我再次明确地指定了我的java jdk路径。在这成功完成之后,我能够在Rstudio中安装rJava,我需要安装glmulti。
oknwwptz7#
在我的情况下,我不得不跑
就像
su
一样,只是sudo
不工作。ql3eal8s8#
对于Ubuntu 22.04用户,
openjdk-19-jdk
和openjdk-19-jre
可用。安装这些也解决了这个问题。最好使用最新版本: