it-swarm.com.de

rJava-Ladefehler in RStudio/R nach "Upgrade" auf OSX Yosemite

Ich habe kürzlich ein Upgrade von OSX Mountain Lion auf Yosemite und von R 3.1.3 auf 3.2 durchgeführt. Unmittelbar nach dem Upgrade, als ich R oder RStudio öffnete, erhielt ich eine Popup-Meldung, dass ich Java 6 installieren musste. Außerdem führte das Laden von rJava oder eines von rJava abhängigen Pakets (z. B. xlsx) zum Absturz von RStudio (R stürzte auch ab, als ich es versuchte, R.app direkt zu öffnen). 

Nachdem ich ein paar Korrekturen aus Stack Overflow und anderswo gefunden habe (weitere Details unten), bin ich an einem Punkt angelangt, an dem das Laden von rJava oder eines Pakets, das von rJava abhängt, nicht mehr zum Absturz von R führt, jedoch zu folgendem Fehler führt:

library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so
  Reason: image not found
Error: package or namespace load failed for ‘rJava’

Wenn ich jedoch R von der Befehlszeile aus aufrufe und dann rJava oder ein anderes Paket, das von rJava abhängt, lade, scheint es zu funktionieren (oder ich bekomme zumindest keine Fehlermeldungen).

Ich habe eine Reihe verschiedener Korrekturversuche ausprobiert, einige davon ein paar Mal, und ich kann mich nicht genau erinnern, was ich in welcher Reihenfolge gemacht habe (ich wusste nicht, dass das so ein Trottel wäre und nicht wirklich den Überblick hielt) , aber hier ist der Kern davon:

  • Folgendes wurde meinem .bash_profile (per dieser SO Antwort ) hinzugefügt:

    export Java_HOME = "/ usr/libexec/Java_home -v 1.8"
    Exportieren Sie LD_LIBRARY_PATH = $ Java_HOME/jre/lib/server

  • Rekonfiguriertes Java von der Befehlszeile aus wie folgt:

    Sudo R CMD javareconf -n 

  • options("Java.home") geprüft und festgestellt, dass dies auf NULL gesetzt wurde. Ich habe versucht, es auf folgende (per diese SO - Frage ) einzustellen:

    options ("Java.home" = "/ Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Inhalt/Start/jre")

  • Installierte das neueste Java Development Kit und installierte rJava von der Quelle neu (kann mich nicht erinnern, wo ich das gefunden habe).

Irgendwann konnte ich rJava laden, ohne R abstürzen zu lassen. Stattdessen bekam ich die Fehlermeldung, die oben angezeigt wurde. Wenn ich RStudio beendet habe, scheint es normal zu schließen, aber es erscheint eine Meldung "RStudio unerwartet beendet", die darauf hinweist, dass das Programm beim Schließen abgestürzt ist. 

Ich entschied mich schließlich für die Installation von Java für OS X 2014-001 (Java 6), da mir scheinbar die Optionen ausgehen. Wenn ich nun R oder RStudio öffnete, wurde die Popup-Meldung "Diese Software benötigt Java 6" nicht mehr angezeigt. Ich habe jedoch immer noch die .onLoad failed in loadNamespace() for 'rJava'-Fehlermeldung erhalten. 

Bei der Durchsicht einiger der Beiträge, die ich bereits angeschaut hatte, fiel mir auf eine andere SO Antwort , die ich zuvor vermisst hatte, und empfahl, RStudio mit dem folgenden Befehlszeilencode zu öffnen, der RStudio den richtigen Pfad gibt Java:

LD_LIBRARY_PATH = $ (/ usr/libexec/Java_home)/jre/lib/server: Öffnen Sie -a RStudio

Das öffnete ein RStudio-Fenster und ich konnte auch rJava und Pakete, die davon abhängen, laden, ohne einen Fehler zu erhalten.

Schließlich habe ich versucht, R von der Kommandozeile aus auszuführen (was ich vorher nicht getan hatte). Es stellt sich heraus, dass das Laden von rJava oder eines Pakets, das von rJava abhängt, in der Befehlszeile funktioniert und keine Fehler auslöst.

So kann ich jetzt rJava zum Laufen bringen, wenn ich RStudio von der Befehlszeile aus mit dem Code öffne, der RStudio den Java-Pfad gibt (wie oben angegeben). Ich möchte jedoch einen Weg finden, um das zugrunde liegende Problem zu beheben, und zwar so, dass RStudio auf die übliche Mac-Weise geöffnet werden kann, ohne dass eine Befehlszeile benötigt wird. Ich mache mir auch Sorgen, dass die Installation einer alten Java-Version zu Problemen führen könnte. 

Hat jemand Ideen, wie man dieses Problem diagnostizieren und lösen kann?

111
eipi10

Ich hatte das gleiche Problem und machte die gleichen Schritte wie Sie. Der letzte Schritt, um RStudio über Finder/Spotlight zu starten, war die Verknüpfung von libjvm.dylib mit/usr/local/lib:

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

-f-Flag wird hinzugefügt, um das Überschreiben vorhandener Dateien/Links zu erzwingen

269
aseidlitz

Unter OSX El Capitan 10.11 hat der Benutzer keine Berechtigung zum Schreiben in/usr/lib. Verwenden Sie also stattdessen den folgenden Befehl:

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
51
lalas

Sie können die libjvm.dylib explizit laden, indem Sie wie ausführen

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
28
yuan

Bei macOS High Sierra (10.13.1) und Java Version 9 müssen Sie einen etwas anderen JVM-Pfad verwenden (beachten Sie den fehlenden Ordner jre im Pfad im Vergleich zu den Anweisungen für frühere Java-Versionen):

Sudo ln -f -s $(/usr/libexec/Java_home)/lib/server/libjvm.dylib /usr/local/lib

Sie müssen R auch über die JVM informieren:

MY_R_VERSION=$(Rscript -e "cat(with(R.version, sprintf('%s.%s', major, substring(minor, 1, 1))))")
ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/$MY_R_VERSION/Resources/lib/
22
Endre

Folgende Befehle funktionieren:

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

Anschließend lädt RJava in RStudio das Laden des Pakets "xlsx".

library("xlsx")

P.S. # 1-Umgebung: Mac OS X El Capitan 10.11.3+ mit RStudio 0.99.491+ und R 3.2.3+. (Ich habe das jetzt auch auf macOS Sierra (10.12) und R.3.3.1 getestet.)

P.S. # 2 Ich finde, dass openxlsx viel schneller ist und nicht auf Java angewiesen ist, um zu funktionieren, also verwende ich dieses Paket jetzt. Hoffe das hilft anderen.

So habe ich es auf zwei Macs mit Mac OS X El Capitan (10.11.6) ordnungsgemäß konfiguriert:

  1. Deinstallieren Sie 'rJava', indem Sie die folgenden Befehle in einem Terminalfenster ausgeben:

    Rscript -e 'remove.packages("rJava")'
    Sudo Rscript -e 'remove.packages("rJava")'
    
  2. Laden Sie die Java-Software von Oracle herunter und installieren Sie sie: https://www.Java.com/de/download/mac_download.jsp

  3. Fügen Sie mit Ihrem bevorzugten Editor die folgenden Zeilen zu /Users/<userid>/.bashrc hinzu:

    # Set Java_HOME so rJava package can find it
    export Java_HOME=$(/usr/libexec/Java_home -v 1.8)/jre
    
  4. Schließen Sie alle Terminal-, R- und RStudio-Fenster, und starten Sie sie erneut (um die Änderungen an .bashrc zu übernehmen).

  5. Führen Sie den folgenden Befehl in einem Terminalfenster aus:

    Sudo ln -sf $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
    
  6. Führen Sie den folgenden Befehl in einem Terminalfenster aus: 

    Sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
    
6

Sie sollten in der Lage sein, CRAN rJava zu verwenden, ohne rJava neu zu kompilieren oder zusätzliche Schritte auszuführen, indem Sie die gemeinsam genutzte Bibliothek mit dem Bibliotheksverzeichnis von R Frameworks verknüpfen.

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
5
Jim

Hier sind die einfachen Schritte dafür:

  1. entfernen Sie das rJava-Paket: remove.packages (rJava)
  2. näher
  3. installieren Sie das neueste Java auf Ihrem Mac
  4. Öffnen Sie das Terminal und geben Sie den folgenden Befehl ein: Sudo R CMD javareconf
  5. Öffnen Sie R und installieren Sie rJava mit diesem Befehl:

    install.packages ("rJava", Abhängigkeiten = TRUE, Typ = "Quelle")

Das Problem mit dem Image, das nicht gefunden wurde, liegt bei einer brandneuen Installation von OSX High Sierra mit dem neuesten Java SE 10 JDK vor.

Ich konnte das Pfadproblem mit rJava mit dem Fix auf der Problemseite von rJava Github beheben: https://github.com/s-u/rJava/issues/78

R CMD javareconf Java_CPPFLAGS = -I/System/Library/Frameworks/JavaVM.framework/Header 

3
Galen

Überprüfen Sie den Speicherort der libjvm.dylib-Datei. 

Versuchen Sie dies in meinem Fall:

dyn.load('/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib')
library(rJava)
1
Sagar Neel De

Ich habe alle Fehlerbehebungsmaßnahmen durchlaufen, die ich finden konnte, und dann jdk-11.0.1_osx-x64_bin.dmg installiert von: Oracle-Downloads

Danach hat alles perfekt geklappt.

Überprüfen Sie die Version der Bibliothek, die beim Ausführen der Bibliothek ('rJava') nicht geladen wurde, und passen Sie sie an die Java -Version an, die Sie installiert haben möchten.

1
user2428818

Hier, was bei mir auf MAC funktioniert hat:

  1. fügen Sie in Ihrem ~/.profile oder ~/.bashrc die folgende Zeile hinzu: %export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile (Oder % source .bashrc)

  2. % Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  3. remove.packages(rJava)
  4. remove.packages(Rweka)
  5. Geben Sie vom Terminal aus den folgenden Befehl ein: %Sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Lade dein library("rJava", "RWeka")

Viel Glück.

1
Nasser

Vielleicht noch eine einfache Antwort, die Ihr Dateisystem nicht berührt:

$ install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so

(Ersetzen Sie jdk1.8.0_131.jdk durch Ihren JDK-Pfad.)

1
mokjpn

Die folgende Zeile hat das gleiche Problem gelöst, das ich mit dem Paket rJava hatte, wie andere in dieser Diskussion. Ich bin sicher, dass es mehr als eine Lösung für dieses Problem gibt, und ich danke allen aufrichtig für ihre Beiträge, denn manchmal spart eine Zeile wie die unten stehende eine Menge Zeit für den Müll! 

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
0
Süleyman

Hier können Sie die ältere Java-Version 6 für El Capitan herunterladen: https://support.Apple.com/kb/DL1572?viewlocale=de_DE&locale=de_DE Danach funktioniert das rJava-Paket für mich.

0
ignazw

Führen Sie in der Befehlszeile Folgendes aus: Sudo R CMD javareconf

Mehrere Lösungen oben haben dies erwähnt, aber es wird auch vorgeschlagen, das Paket rJava zu entfernen und anschließend erneut zu installieren. Ich fand diese zusätzlichen Schritte unnötig.

0
Megatron