8 votes

R, erreur de chargement de rJava

Je lance R (version 3.4.0) sur macOS Sierra (10.12.5) et j'essaie d'utiliser la bibliothèque xlsx qui nécessite l'utilisation de la bibliothèque rJava.

Lorsque j'essaie de charger rJava en utilisant library(rJava) dans la console R (sans différence que ce soit dans RStudio ou dans le terminal), je reçois le message d'erreur suivant auquel j'ai du mal à donner un sens :

Erreur : le chargement de l'espace de noms ou du package a échoué pour ‘rJava’:
 .onLoad in loadNamespace() pour 'rJava' a échoué, Détails:
  Appel : dyn.load(file, DLLpath = DLLpath, ...)
  Erreur : impossible de charger l'objet partagé '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so, 6) : Bibliothèque non chargée : @rpath/libjvm.dylib
  Référencé depuis : /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
  Raison : image introuvable

En recherchant sur le problème, j'ai trouvé plusieurs messages relatifs à des problèmes légèrement similaires (mais chaque fois légèrement différents), cette question SO étant la plus prometteuse parmi eux.

Comme les étapes proposées nécessitent une adaptation à mon cas et que je suis plutôt novice, je n'ai pas pu les mettre en œuvre. Que puis-je faire?

Informations supplémentaires :

La commande shell java -version renvoie :

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Et la commande shell R CMD javareconf renvoie :

Java interpreter : /usr/bin/java
Java version     : 1.8.0_131
Java home path   : /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar
Java sur macOS

essayant de compiler et linker un programme JNI 
drapeaux cpp JNI détectés    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
drapeaux de liaison JNI détectés : -L$(JAVA_HOME)/lib/server -ljvm
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include/darwin  -I/usr/local/include   -fPIC  -Wall -g -O2  -c conftest.c -o conftest.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -    L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation

JAVA_HOME      /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Chemin de la bibliothèque Java: $(JAVA_HOME)/lib/server
Drapeaux cpp JNI    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
Drapeaux de liaison JNI : -L$(JAVA_HOME)/lib/server -ljvm
Mise à jour de la configuration Java dans /Library/Frameworks/R.framework/Resources
Terminé.

Toute aide sera grandement appréciée!

17voto

MrMax Points 323

Cela fonctionne!

Après avoir installé et réinstallé différentes versions de Java et réinstallé rJava avec la commande R install.packages("rJava"), j'en suis arrivé au point où le chargement de la bibliothèque dans la console R (fenêtre shell) ne lançait plus de message d'erreur.

Après cela, j'ai pu utiliser la réponse dans ce post pour le faire fonctionner dans RStudio en exécutant cette commande shell:

sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

Pas si compliqué après tout! Merci pour la patience de tous.

1voto

vinay karagod Points 80

Le chemin JAVA_HOME est différent pour différentes versions de MAC OS. Dans certains cas, il y a un dossier /jre et dans d'autres cas, il n'y en a pas après le répertoire /Home; allez manuellement vers le dossier /server avec la commande CD dans le terminal et en utilisant pwd copiez le chemin complet, utilisez-le pour définir java.home, puis vous pouvez facilement charger la bibliothèque rJava. C'est ainsi que j'ai pu résoudre le problème

options("java.home"="/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/lib")

Sys.setenv(LD_LIBRARY_PATH='$JAVA_HOME/server')

dyn.load('/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/lib/server/libjvm.dylib')

library(rJava)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X