J'ai essayé de résoudre ce problème en utilisant les questions/réponses précédentes sur SO mais sans succès. Alors, voici mon problème.
J'utilise RStudio et la boîte Ubuntu (14.04) et j'ai essayé de mettre à niveau rJava à partir des sources et dans le processus, j'ai réussi à le perdre.
J'ai essayé de l'installer à nouveau en utilisant,
install.packages("rJava")
qui a renvoyé le message d'erreur suivant,
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
Je suis donc allé au terminal et j'ai tapé,
Sudo R CMD javareconf
qui a également donné l'erreur suivante,
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.
J'ai essayé de suivre ces liens, n et deux mais ils ne semblaient pas résoudre mon problème; il y a plus de liens sur SO mais je ne sais pas lequel suivre. J'ai également désinstallé et réinstallé RStudio via le Ubuntu Software Center mais cela n'a fait aucun différence.
Quelqu'un d'autre peut-il aider?
En bref, je veux pouvoir utiliser à nouveau RStudio avec rJava sans que cela détruise toute autre utilisation de Java (comme jmol).
Vous ne semblez pas avoir installé JDK. Vous aurez besoin d'au moins
Sudo apt-get install openjdk-7-jdk
puis relancez
Sudo R CMD javareconf
Assurez-vous de ne PAS définir Java_HOME
à la main - il sera détecté automatiquement. Vous devriez alors voir quelque chose comme ceci:
$ 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
Qu'est-ce qui ne va pas chez Sudo apt-get install r-cran-rjava
?
Voir par exemple cette réponse précédente et la question/fil autour.
Pour une installation à partir de zéro, vous pourriez encore bien pire que de partir de Sudo apt-get build-dep r-cran-rjava
. Il vous obtiendra le JDK correspondant à votre version d'Ubuntu.
Tout d'abord, je recommanderais d'installer Rstudio à partir de son site Web: https://www.rstudio.com/products/rstudio/download/ (c'est-à-dire Rstudio 64 bits: https: //download1.rstudio. org/rstudio-0.99.489-AMD64.deb ). Cela ne résout pas le problème directement, mais cela permet d'éviter d'autres bogues avec Rstudio.
En ce qui concerne l'erreur, essayez de vous assurer que vous avez installé JDK. Je ne pense pas que la commande Java -version
Puisse dire si JDK est installé. Vous devez vérifier le package de JDK lui-même, ou en fonction du message d'erreur, procédez comme suit:
locate jni.h
La sortie doit correspondre ou être compatible avec votre JAVAHOME, par exemple:
/usr/lib/jvm/Java-7-openjdk-AMD64/include/jni.h
/usr/lib/jvm/Java-7-Oracle/include/jni.h
Mise à jour 1: R CMD javareconf
Recherche le fichier jni.h
Sous $(Java_HOME)/include
Vous avez installé JDK , mais il est très probable que vous ayez par défaut Java dans un répertoire JRE, c'est pourquoi l'erreur s'est produite.
Vous pouvez voir où default-Java
Pointe vraiment en exécutant cette commande:
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
Si la commande ls
a échoué, vous devez configurer pour que javareconf
(et plus tard rJava
) puisse utiliser le Java de JDK et non de JRE. Vous avez deux options:
Méthode 1: faites-le à l'échelle du système
C'est pratique, mais cela peut affecter d'autres programmes comme celui que vous avez mentionné jmol
. Mais ne vous inquiétez pas, c'est réversible, relancez simplement la commande et choisissez l'ancienne. Exécutez la commande suivante et choisissez le répertoire contenant JDK:
Sudo update-alternatives --config Java
Après ce test, comment fonctionne jmol
, si cela fonctionne bien, félicitez-le. Vous êtes maintenant prêt à tester rJava. Sinon, essayez la deuxième méthode ci-dessous
Méthode 2: faites-le uniquement pour R
mettez ceci dans le .Rprofile
sous votre répertoire personnel
Sys.setenv(Java_HOME = '/usr/lib/jvm/jdk1.8.0_65')
# this set Java_HOME for R to correct Java home dir.
Après avoir mis à jour ou créé le .Rprofile
, Redémarrez R dans Rstudio. Le R CMD javareconf
Peut toujours échouer dans ce cas, mais cela devrait être OK si vous l'exécutez à partir de Shell
sous le menu Tools
de Rstudio.
Concernant l'installation ou Rstudio du stock repo d'Ubuntu. Cela ne ferait aucune différence pour lancer rJava
. Là encore, je recommande d'installer Rstudio pour sa page d'accueil car la nouvelle version a également quelques fonctionnalités intéressantes (c'est-à-dire une meilleure autocomplétion, que j'aime le plus).
J'ai eu affaire à ce problème exact, rien dans ce fil ou autre qui est similaire ne l'a résolu. Je suis sur Ubuntu 16.04, voici comment je l'ai fait fonctionner:
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
Vous pouvez voir où se trouve Java_HOME
Dans le message d'erreur.
Utilisez ensuite locate jni.h
Pour trouver où est jni.h
, Puis utilisez un lien logiciel pour lier cet emplacement à $(Java_HOME)/include
, tout comme @biocyberman l'a mentionné.
C'est ce que j'ai fait:
ln -s /usr/lib/jvm/Java-8-openjdk-AMD64/include/jni.h /opt/conda/include/jni.h
ln -s /usr/lib/jvm/Java-8-openjdk-AMD64/include/linux/jni_md.h /opt/conda/include/jni_md.h
ln -s /usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/AMD64/server/libjvm.so /usr/lib/
Puisque mon Java_HOME
Est /opt/conda
Et je n'ai pas non plus jni_md.h
Et -ljvm
.
J'utilise Ubuntu 16.04
.