Установка rJava
Я пытался решить это, используя предыдущие вопросы/ответы на SO, но без каких-либо успехов. Итак, вот моя проблема.
Я использую RStudio on и 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.
Я попытался следовать этим ссылкам, один и два, но они, похоже, не разрешили мои вопрос; есть еще ссылки на SO, но я не уверен, какой из них следует соблюдать. Я также не установил и снова установил RStudio через Ubuntu Software Center, но это не имело никакого значения.
Может ли кто-нибудь еще помочь?
Короче говоря, я хочу иметь возможность использовать RStudio с rJava снова, не уничтожая другие применения Java (например, jmol).
Ответы
Ответ 1
У вас, похоже, нет JDK. Вам понадобится как минимум
sudo apt-get install openjdk-7-jdk
затем запустите
sudo R CMD javareconf
Убедитесь, что вы НЕ устанавливаете JAVA_HOME
вручную - он будет обнаружен автоматически. Затем вы должны увидеть что-то вроде этого:
$ sudo R CMD javareconf
Java interpreter : /usr/bin/java
Java version : 1.7.0_91
Java home path : /usr/lib/jvm/java-7-openjdk-amd64/jre
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
detected JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -I/usr/lib/jvm/java-7-openjdk-amd64/jre/../include -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -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-7-openjdk-amd64/jre/lib/amd64/server -ljvm -L/usr/lib/R/lib -lR
JAVA_HOME : /usr/lib/jvm/java-7-openjdk-amd64/jre
Java library path: $(JAVA_HOME)/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/../include
JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
Ответ 2
Что не так с sudo apt-get install r-cran-rjava
?
См. например, этот более ранний ответ и вопрос/поток вокруг него.
Для установки с нуля вы все равно можете намного хуже, чем начиная с sudo apt-get build-dep r-cran-rjava
. Это даст вам JDK, соответствующий вашей версии Ubuntu.
Ответ 3
Сначала я бы рекомендовал установить 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
) мог использовать java из JDK не из 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.
После обновления или создания .Rprofile
перезапустить R в Rstudio. R CMD javareconf
может по-прежнему сбой в этом случае, но он должен быть ОК, если вы запустите его из Shell
в Tools
меню Rstudio.
Относительно установки или Rstudio из резервной копии акций Ubuntu. Это не повлияло бы на запуск rJava
. Затем я рекомендую установить Rstudio для своей домашней страницы, потому что новая версия также имеет некоторые приятные функции (то есть лучше автозаполнение, которое мне больше всего нравится).
Ответ 4
Я имел дело с этой точной проблемой, ничто в этом потоке или другом, которые схожи, не разрешили. Я на 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