J'exécute 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 à l'aide de library(rJava)
dans la console R (il n'y a pas de différence entre RStudio et le terminal), le message d'erreur suivant s'affiche et j'ai du mal à comprendre:
Fehler: package or namespace load failed for ‘rJava’:
.onLoad in loadNamespace() für 'rJava' fehlgeschlagen, Details:
Aufruf: dyn.load(file, DLLpath = DLLpath, ...)
Fehler: kann shared object '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so' nicht laden:
dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
Reason: image not found
En cherchant le problème sur Google, j'ai trouvé un certain nombre de messages sur des problèmes quelque peu similaires (mais à chaque fois légèrement différents), cette SO question étant la plus prometteuse d'entre elles.
Comme les étapes proposées nécessitent une adaptation à mon cas et que je suis un peu novice, je n’ai pas pu les mettre en œuvre. Que puis-je faire?
Information additionnelle:
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
Non-system Java on macOS
trying to compile and link a JNI program
detected JNI cpp flags : -I$(Java_HOME)/../include -I$(Java_HOME)/../include/darwin
detected JNI linker flags : -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
Java library path: $(Java_HOME)/lib/server
JNI cpp flags : -I$(Java_HOME)/../include -I$(Java_HOME)/../include/darwin
JNI linker flags : -L$(Java_HOME)/lib/server -ljvm
Updating Java configuration in /Library/Frameworks/R.framework/Resources
Done.
Toute aide est la bienvenue!
Ça marche!
Après avoir installé et réinstallé différentes versions de Java et rJava avec la commande R install.packages("rJava")
, je suis arrivé au point où le chargement de la bibliothèque dans la console R (fenêtre Shell) ne générait plus de message d'erreur.
Après cela, j'ai pu utiliser la réponse dans this post pour que cela fonctionne 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 trop compliqué après tout! Merci pour la patience de tous.
Le chemin Java_HOME est différent pour différentes versions de MAC OS. Dans certains cas, il existe un dossier /jre
et dans certains cas, pas après le /Home
directeur, allez manuellement vers le dossier /server
avec la commande CD dans le terminal et, en utilisant pwd
, copiez le chemin complet pour définir Java.home, puis chargez facilement la bibliothèque rJava
. Voici comment 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)