尝试在 R 3.6.1 上安装 rJava,但在配置 R 以支持 Java 时遇到问题

尝试在 R 3.6.1 上安装 rJava,但在配置 R 以支持 Java 时遇到问题

我正在尝试在 Ubuntu 18.04 上的 R 3.6.1 中安装 rJava。我搜索过类似的问题,但提供的答案似乎对我没有用。

我最初尝试sudo apt install r-cran-rjavainstall.packages("rJava")

sudo apt install r-cran-rjava返回了一个依赖问题,该问题似乎可以通过添加 Debian Buster 存储库来解决,etc/apt/sources.list我按照以下提供的说明进行了操作:https://cran.r-project.org/bin/linux/debian/. r-cran-rjava 现在似乎已正确安装:

$ sudo apt install r-cran-rjava
[sudo] password for tj: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
r-cran-rjava is already the newest version (0.9-11-1cran1ppabionic0).
0 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.

但是,当我install.packages("rJava")从 R 运行时,它返回以下错误消息:

install.packages("rJava")
Installing package into ‘/home/tj/R/x86_64-pc-linux-gnu-library/3.6’
(as ‘lib’ is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/rJava_0.9-11.tar.gz'
Content type 'application/x-gzip' length 675188 bytes (659 KB)
==================================================
downloaded 659 KB

* installing *source* package ‘rJava’ ...
** package ‘rJava’ successfully unpacked and MD5 sums checked
** using staged installation
checking for gcc... gcc -std=gnu99
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -std=gnu99 accepts -g... yes
checking for gcc -std=gnu99 option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for string.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking for unistd.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking whether time.h and sys/time.h may both be included... yes
configure: checking whether gcc -std=gnu99 supports static inline...
yes
checking whether setjmp.h is POSIX.1 compatible... yes
checking whether sigsetjmp is declared... yes
checking whether siglongjmp is declared... yes
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-11-oracle/include -I/usr/lib/jvm/java-11-oracle/include/linux'
java libs   : '-L/usr/lib/jvm/java-11-oracle/lib/server -ljvm'
checking whether Java run-time works... yes
checking whether -Xrs is supported... yes
checking whether -Xrs will be used... yes
checking whether JNI programs can be compiled... yes
checking whether JNI programs run... 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/tj/R/x86_64-pc-linux-gnu-library/3.6/rJava’

The downloaded source packages are in
    ‘/tmp/Rtmp9GstQE/downloaded_packages’
Warning message:
In install.packages("rJava") :
  installation of package ‘rJava’ had non-zero exit status

此处发布的说明https://thishosting.rocks/install-java-ubuntu/导致我安装了多个版本的 Java,包括 Java-11-oracle。我sudo update-alternatives --config java在更新 JAVA_HOME 之前将 Java-11-oracle 设置为默认设置sudo nano /etc/environment,结果echo $JAVA_HOME如下:

$ echo $JAVA_HOME
/usr/lib/jvm/java-11-oracle/bin/java

但当我运行时sudo R CMD javareconf它返回:

*** JAVA_HOME is not a valid path, ignoring
Java interpreter : /usr/bin/java
Java version     : 11.0.4
Java home path   : /usr/lib/jvm/java-11-oracle
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/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-oracle/include -I/usr/lib/jvm/java-11-oracle/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-oracle/lib/server -ljvm -L/usr/lib/R/lib -lR


JAVA_HOME        : /usr/lib/jvm/java-11-oracle
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.

install.packages("rJava")返回与之前相同的错误消息。我尝试使用相同的方法将 java-11-openjdk 和 java-8-openjdk 设置为默认值,并尝试使用 JAVA_HOME 路径的几种变体,如该主题的一些旧帖子所建议的那样(https://stackoverflow.com/questions/3311940/r-rjava-package-install-failing& https://stackoverflow.com/questions/31684236/java-home-not-working-in-ubuntu) 但到目前为止R CMD javareconfinstall.packages("rjava")结果都类似。

我对 R 和 Ubuntu 还不太熟悉,我感觉我在这方面遇到了瓶颈,有人能看出我错过了什么吗?我应该恢复到旧版本的 R 吗?任何帮助都将不胜感激。

相关内容