安装rJava

时间:2015-12-10 21:48:42

标签: r rjava

我尝试使用之前的问题/答案来解决这个问题,但没有任何成功。所以,这是我的问题。

我正在使用RStudio和Ubuntu框(14.04),我尝试从源代码升级rJava,在此过程中我设法丢失了它。

我尝试使用

重新安装它
install.packages("rJava")

返回以下错误消息

configure: error: One or more Java configuration variables are not set.
Make sure R is configured with full Java support (including JDK). Run
R CMD javareconf
as root to add Java support to R.

If you don't have root privileges, run
R CMD javareconf -e
to set all Java-related variables and then install rJava.

ERROR: configuration failed for package ‘rJava’
* removing ‘/home/darren/R/x86_64-pc-linux-gnu-library/3.2/rJava’
Warning in install.packages :
  installation of package ‘rJava’ had non-zero exit status

所以,我去了终端并打字,

sudo R CMD javareconf

也出现以下错误,

trying to compile and link a JNI program 
detected JNI cpp flags    : 
detected JNI linker flags : -L/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server -ljvm
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG      -fpic  -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -g  -c conftest.c -o conftest.o
conftest.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.
make: *** [conftest.o] Error 1
Unable to compile a JNI program


JAVA_HOME        : /usr/lib/jvm/default-java
Java library path: 
JNI cpp flags    : 
JNI linker flags : 
Updating Java configuration in /usr/lib/R
Done.

我尝试按照这些链接onetwo,但似乎没有解决我的问题; SO上有更多的链接,但我不确定要遵循哪一个。我也通过Ubuntu软件中心卸载并重新安装了RStudio,但这没有任何区别。

其他人可以帮忙吗?

简而言之,我希望能够再次使用RSJudio和rJava,而不会破坏Java的任何其他用途(例如jmol)。

5 个答案:

答案 0 :(得分:13)

sudo apt-get install r-cran-rjava有什么问题?

请参阅for example this earlier answer及其周围的问题/主题。

对于从头开始的安装,您仍然比从sudo apt-get build-dep r-cran-rjava开始更糟糕。它将为您提供与您的Ubuntu版本相对应的JDK。

答案 1 :(得分:5)

首先我建议从其网站安装Rstudio:https://www.rstudio.com/products/rstudio/download/(即Rstudio 64bit:https://download1.rstudio.org/rstudio-0.99.489-amd64.deb)。这并没有直接解决问题,但它有助于避免Rstudio的其他错误。

关于错误,尝试确保安装了JDK。我不认为命令java -version可以判断JDK是否已安装。您必须检查JDK本身的包,或者根据错误消息,执行以下操作:

locate jni.h 输出应与您的JAVAHOME匹配或兼容,例如:

/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h 
/usr/lib/jvm/java-7-oracle/include/jni.h        

更新1: R CMD javareconf正在寻找jni.h下的$(JAVA_HOME)/include文件 您已经安装了JDK,但是您很可能将默认java用于JRE目录,这就是错误发生的原因。

通过执行此命令,您可以看到default-java真正指向的位置:

jRealDir=$(readlink -f /usr/lib/jvm/default-java)
echo $jRealDir
# sample correct output: /usr/lib/jvm/jdk1.8.0_65 
# or /usr/lib/jvm/java-8-oracle if you default to Oracle's
# now check jni.h
ls -l $jRealDir/include/jni.h
# sample expected output:
# /usr/lib/jvm/jdk1.8.0_65/include/jni.h

如果ls命令失败,则必须进行设置,以便javareconf(以及后来的rJava)可以使用JDK中的Java而不是JRE。您有两种选择:

方法1:在系统范围内进行

这很方便,但可能影响其他程序,例如您提到的jmol。但不要担心,这是可以恢复的,只需重新运行命令并选择旧命令即可。执行以下命令并选择具有JDK的目录:

sudo update-alternatives --config java

在测试之后jmol如何工作,如果它正常工作,那么祝贺。您现在可以测试rJava了。如果没有,请尝试下面的第二种方法

方法2:仅针对R

执行此操作

将其放在您主目录下的.Rprofile

Sys.setenv(JAVA_HOME = '/usr/lib/jvm/jdk1.8.0_65')
# this set JAVA_HOME for R to correct java home dir. 

在Rstudio中更新或创建.Rprofile DO重启R后。在这种情况下,R CMD javareconf可能仍会失败,但如果您从Rstudio的Shell菜单下的Tools运行它,则应该没问题。

关于Ubuntu股票回购的安装或Rstudio。让rJava运行没有任何区别。然后,我建议为其主页安装Rstudio,因为新版本也有一些不错的功能(即更好的自动完成,我最喜欢)。

答案 2 :(得分:1)

以下是对我有用的R-Blogger上的链接:https://www.r-bloggers.com/installing-rjava-on-ubuntu/

sudo apt-get install -y default-jre
sudo apt-get install -y default-jdk
sudo R CMD javareconf
install.packages("rJava")

答案 3 :(得分:0)

我一直在处理这个确切的问题,这个线程或类似的其他内容都没有解决它。我正在使用Ubuntu 16.04,这是我如何使用它:

apt-get install openjdk-9-jdk rm -rf /usr/lib/jvm/default-java ln -s /usr/lib/jvm/java-9-openjdk-amd64/ /usr/lib/jvm/default-java

答案 4 :(得分:0)

您可以在错误消息中看到JAVA_HOME的位置。

然后使用locate jni.h查找jni.h的位置,然后使用软链接将此位置链接到$(JAVA_HOME)/include,就像@biocyberman提到的那样。

这就是我所做的:

ln -s /usr/lib/jvm/java-8-openjdk-amd64/include/jni.h /opt/conda/include/jni.h
ln -s /usr/lib/jvm/java-8-openjdk-amd64/include/linux/jni_md.h /opt/conda/include/jni_md.h
ln -s /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so /usr/lib/

由于我的JAVA_HOME/opt/conda而且我还没有jni_md.h-ljvm

我使用的是Ubuntu 16.04