install rJava - “configure: error: One or more JNI

2019-02-13 17:38发布

I have came across this problem while installing rJava on R3.0.1: "configure: error: One or more JNI types differ from the corresponding native type"

The detailed message is attached below. I searched for similar problems but my issue is a little trickier and many proposed solutions either didnt work or I could not try, because I am working on a server which I do not have write access to system libraries.

OS: Linux 2.6.18-348.6.1.el5 #1 SMP Tue May 21 15:44:27 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux (info given by typing "uname -a" sorry I couldn't quite understand this info)

R: R3.0.1, I downloaded the source, put in my home directory, and built R from source.

rJava: I ran 'install.packages("rJava")', during installation I got:

=========================
checking Java support in R... present:
interpreter : '/usr/bin/java'
archiver : '/usr/bin/jar'
compiler : '/usr/bin/javac'
header prep.: '/usr/bin/javah'
cpp flags : '-I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre/../include -
I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre/../include/linux'
java libs : '-L/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre/lib/amd64/se
rver -ljvm'
checking whether JNI programs can be compiled... yes
checking JNI data types... configure: error: One or more JNI types differ from the
corresponding native type. You may need to use non-standard compiler flags or
a different compiler in order to fix this.
ERROR: configuration failed for package 'rJava'
* removing '/home/me/R-3.0.1/library/rJava'

==================================

Since I can only access the server remotely, I do not have write access to anything outside my home directory /home/me.

Any information would be highly appreciated!

标签: java r jni rjava
3条回答
干净又极端
2楼-- · 2019-02-13 17:47

I ran into the same problem trying to install.packages("rJava") in R version 3.0.2, as long as I tried to install as ordinary user (Linux, Debian). There was no problem running install.packages("rJava") as root. Then, trying library(rJava) worked for root but not for me as a user:

Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/usr/usr.local.original.Debian/lib/R/site-library/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory

This problem required to add the environment variables JAVA_HOME and LD_LIBRARY_PATH to ~/.login (following instructions found at Trouble in Setting Java Environment Path on Ubuntu (libjvm.so: cannot open shared object file: No such file or directory)):

setenv JAVA_HOME /usr/lib/jvm/java-7-oracle/
setenv LD_LIBRARY_PATH $JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server

# For c-shell; for bash, it would have to be:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server

So, you would have to have a system administrator install rJava for you, then set your environment variables and, of course, set your own .libPaths() in R such as to find rJava.

查看更多
做自己的国王
3楼-- · 2019-02-13 17:47

I hit the same issue on my mac OSx El Capitan. I tried updating the java paths/envs used by R using "R CMD javareconf" with no effects.

Finally, I saw that when I ran "R CMD javareconf" my Java library path: in the output was empty. By digging up further I figured out that my JAVA_HOME was not set correctly as pointed here https://stackoverflow.com/a/3311983 . I had to add an extra /jre in the JAVA_HOME path.

查看更多
Viruses.
4楼-- · 2019-02-13 17:58

Using linux, specifically, 64 bit Gentoo, my solution was to add the following line to /etc/env.d/20java-config

LD_LIBRARY_PATH="/etc/java-config-2/current-system-vm/jre/lib/amd64:/etc/java-config-2/current-system-vm/jre/lib/amd64/server"

Then

  • Run env-update
  • source /etc/profile
  • start rstudio (or if you are using GUI menu, logout and login to load the environment)

The above change needs to be made by root but then will apply to non-root users who use the same system, on next login.

Basically, rJava conf test was failing to find libjvm.so, the conftest program would compile but not link :)

查看更多
登录 后发表回答