Установка 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