我正在嘗試在 Ubuntu 18.04 上的 R 3.6.1 中安裝 rJava。我搜尋過類似的問題,但提供的答案似乎對我不起作用。
我最初嘗試了sudo apt install r-cran-rjava
然後install.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 javareconf
並install.packages("rjava")
返回類似的結果。
我對 R 和 Ubuntu 相當陌生,我覺得我在這方面已經走進了死胡同,有人能看到我錯過了什麼嗎?我應該恢復到舊版本的 R 嗎?任何幫助將不勝感激。