"Unable to run a simple JNI program" 在 R 3.6 上为 ubuntu bionic beaver 安装 rJava 时出现错误消息
"Unable to run a simple JNI program" error message when installing rJava on R 3.6 for ubuntu bionic beaver
我有一个非常普遍的问题,rJava 没有在 Ubuntu 上正确安装。
此问题已在多个地方讨论 here, here, here,仅举几例。
基本问题是在安装 rJava 包时,会产生以下错误消息
configure: error: Unable to run a simple JNI program. Make sure you have configured R with Java support (see R documentation) and check config.log for failure reason.
Warning in system(cmd) : error in running command
ERROR: configuration failed for package ‘rJava’
* removing ‘/home/jonno/R/x86_64-pc-linux-gnu-library/3.6/rJava’
这个问题有多种密切相关的解决方案。他们中的大多数使用sudo R CMD javareconf
为R配置Java(also a -e
variant). Some suggest setting the JAVA_HOME
path in the environment variables (others say not to). Others suggest uninstalling and re-installing R whilst others建议从cran安装rJava。有几个人推荐update alternatives
。还有其他变体这些解决方案。
我已经尝试了以上所有方法的组合,但没有成功,所以很明显我做错了什么。
进入echo $JAVA_HOME
returns
/usr/lib/jvm/java-11-openjdk-amd64
我的etc/environment看起来像这样
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/$
MKL_THREADING_LAYER=GNU
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
当我运行 R CMD javaconf时,它看起来像这样
Java interpreter : /usr/lib/jvm/java-11-openjdk-amd64/java
Java version : 11.0.4
Java home path : /usr/lib/jvm/java-11-openjdk-amd64
Java compiler : /usr/lib/jvm/java-11-openjdk-amd64/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/lib/jvm/java-11-openjdk-amd64/bin/jar
trying to compile and link a JNI program
detected JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
gcc -std=gnu99 -I"/usr/share/R/include" -DNDEBUG -I/usr/lib/jvm/java-11-openjdk-amd64/include -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux -fpic -g -O2 -fdebug-prefix-map=/build/r-base-uuRxut/r-base-3.6.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c conftest.c -o conftest.o
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o conftest.so conftest.o -L/usr/lib/jvm/java-11-openjdk-amd64/lib/server -ljvm -L/usr/lib/R/lib -lR
JAVA_HOME : /usr/lib/jvm/java-11-openjdk-amd64
Java library path: $(JAVA_HOME)/lib/server
JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
Updating Java configuration in /usr/lib/R
Done.
我做错了什么以及如何让 rJava 正确安装?
编辑:
使用 sudo apt-get install r-cran-rjava
成功安装 rJava 我知道出现以下错误
Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/usr/lib/R/site-library/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file: No such file or directory
我调查了原始发布者(我们在同一个地方工作),问题是在 OpenJDK11 中,他们移动了 JVM 所在的一些 .so
文件,特别是 libjvm.so
在 Ubuntu 包中现在在 /usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server/
.
这意味着即使您使用 apt install r-cran-rjava
安装 rJava 的 Ubuntu 包,当您尝试 library(rJava)
.
时它也会失败
解决方案是将 /usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server/
添加到您的 $LD_LIBRARY_PATH
,方法是添加:
export LD_LIBRARY_PATH=/usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server:$LD_LIBRARY_PATH
到您的 ~/.bashrc
结束并开始新的 shell(或 source ~/.bashrc
)。
这是我们必须为 OpenJDK 的中央安装修复的问题,例如这里:https://github.com/UCL-RITS/rcps-buildscripts/blob/master/adoptopenjdk-11.0.3_install.sh#L46
如果你想让它与从 Gnome 启动的 Rstudio 一起工作,你需要将该目录添加到 ldconfig
。
作为 root
(或使用 sudo
)在 /etc/ld.so.conf.d/
中创建一个文件,您应该使用 .conf
扩展名来调用它,例如java.conf
其中包含行:
/usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server
然后作为 root
运行
ldconfig -v
这应该将目录添加到可执行文件通过 GNOME 搜索启动的位置。问题的这个特定部分(GNOME 忽略 bashrc
中的设置)至少从 9.04 (https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/366728/).
开始就是 Ubuntu 中的一个问题。
我有一个非常普遍的问题,rJava 没有在 Ubuntu 上正确安装。 此问题已在多个地方讨论 here, here, here,仅举几例。
基本问题是在安装 rJava 包时,会产生以下错误消息
configure: error: Unable to run a simple JNI program. Make sure you have configured R with Java support (see R documentation) and check config.log for failure reason.
Warning in system(cmd) : error in running command
ERROR: configuration failed for package ‘rJava’
* removing ‘/home/jonno/R/x86_64-pc-linux-gnu-library/3.6/rJava’
这个问题有多种密切相关的解决方案。他们中的大多数使用sudo R CMD javareconf
为R配置Java(also a -e
variant). Some suggest setting the JAVA_HOME
path in the environment variables (others say not to). Others suggest uninstalling and re-installing R whilst others建议从cran安装rJava。有几个人推荐update alternatives
。还有其他变体这些解决方案。
我已经尝试了以上所有方法的组合,但没有成功,所以很明显我做错了什么。
进入echo $JAVA_HOME
returns
/usr/lib/jvm/java-11-openjdk-amd64
我的etc/environment看起来像这样
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/$
MKL_THREADING_LAYER=GNU
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
当我运行 R CMD javaconf时,它看起来像这样
Java interpreter : /usr/lib/jvm/java-11-openjdk-amd64/java
Java version : 11.0.4
Java home path : /usr/lib/jvm/java-11-openjdk-amd64
Java compiler : /usr/lib/jvm/java-11-openjdk-amd64/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/lib/jvm/java-11-openjdk-amd64/bin/jar
trying to compile and link a JNI program
detected JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
gcc -std=gnu99 -I"/usr/share/R/include" -DNDEBUG -I/usr/lib/jvm/java-11-openjdk-amd64/include -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux -fpic -g -O2 -fdebug-prefix-map=/build/r-base-uuRxut/r-base-3.6.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c conftest.c -o conftest.o
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o conftest.so conftest.o -L/usr/lib/jvm/java-11-openjdk-amd64/lib/server -ljvm -L/usr/lib/R/lib -lR
JAVA_HOME : /usr/lib/jvm/java-11-openjdk-amd64
Java library path: $(JAVA_HOME)/lib/server
JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
Updating Java configuration in /usr/lib/R
Done.
我做错了什么以及如何让 rJava 正确安装?
编辑:
使用 sudo apt-get install r-cran-rjava
成功安装 rJava 我知道出现以下错误
Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/usr/lib/R/site-library/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file: No such file or directory
我调查了原始发布者(我们在同一个地方工作),问题是在 OpenJDK11 中,他们移动了 JVM 所在的一些 .so
文件,特别是 libjvm.so
在 Ubuntu 包中现在在 /usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server/
.
这意味着即使您使用 apt install r-cran-rjava
安装 rJava 的 Ubuntu 包,当您尝试 library(rJava)
.
解决方案是将 /usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server/
添加到您的 $LD_LIBRARY_PATH
,方法是添加:
export LD_LIBRARY_PATH=/usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server:$LD_LIBRARY_PATH
到您的 ~/.bashrc
结束并开始新的 shell(或 source ~/.bashrc
)。
这是我们必须为 OpenJDK 的中央安装修复的问题,例如这里:https://github.com/UCL-RITS/rcps-buildscripts/blob/master/adoptopenjdk-11.0.3_install.sh#L46
如果你想让它与从 Gnome 启动的 Rstudio 一起工作,你需要将该目录添加到 ldconfig
。
作为 root
(或使用 sudo
)在 /etc/ld.so.conf.d/
中创建一个文件,您应该使用 .conf
扩展名来调用它,例如java.conf
其中包含行:
/usr/lib/jvm/java-1.11.0-openjdk-amd64/lib/server
然后作为 root
运行
ldconfig -v
这应该将目录添加到可执行文件通过 GNOME 搜索启动的位置。问题的这个特定部分(GNOME 忽略 bashrc
中的设置)至少从 9.04 (https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/366728/).