2017-05-24 8 views
4

Ich verwende R (Version 3.4.0) auf MacOS Sierra (10.12.5) und ich versuche, die Xlsx-Bibliothek zu verwenden, die die Verwendung der rJava-Bibliothek erfordert.R, loading rJava Fehler

Wenn ich versuche, rjava mit library(rJava) in der R-Konsole (keinen Unterschied, ob in RStudio oder im Terminal) zu laden, erhalte ich die folgende Fehlermeldung, die ich habe Probleme machen Sinn von:

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 

Googeln das Problem Ich fand eine Reihe von Posts auf etwas ähnlich (aber jedes Mal etwas andere Probleme), this SO question ist die vielversprechendste unter ihnen.

Da die Schritte des vorgeschlagenen erfordern Anpassung an meinen Fall und ich bin ein bisschen ein Anfänger, konnte ich nicht implementieren sie. Was kann ich tun?

Zusätzliche Informationen:

Der Shell-Befehl java -version kehrt:

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) 

Und der Shell-Befehl R CMD javareconf kehrt:

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. 

Jede Hilfe sehr geschätzt wird!

Antwort

12

Es funktioniert!

Nach der Installation und Neuinstallation von verschiedenen Java-Versionen und Neuinstallation von rJava mit dem R-Befehl install.packages("rJava") kam ich zu dem Punkt, wo das Laden der Bibliothek in der R-Konsole (Shell-Fenster) keine Fehlermeldung mehr geworfen.

Danach konnte ich die Antwort in this post verwenden, um es durch Ausführen dieses Shell-Befehl in RStudio zu arbeiten:

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

Nicht zu kompliziert, nachdem alle! Danke für die Geduld.

0

JAVA_HOME Pfad unterscheidet sich für verschiedene Versionen von MAC OS. In einigen Fällen gibt es /jre Ordner und in einigen Fällen ist es nicht nach /Home Direktor gehen in Richtung /server Ordner mit CD-Befehl im Terminal und mit pwd kopieren Sie den gesamten Pfad verwenden, um die java.home dann können Sie einfach laden rJava Bibliothek. So konnte ich das Problem beheben

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)