rJava-Ladefehler in RStudio / R nach dem „Upgrade“ auf OSX Yosemite


122

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 rJavaoder eines von rJava abhängigen Pakets (z. B. xlsx) zum Absturz von RStudio (R stürzte ebenfalls ab als ich dies durch R.appdirektes Öffnen versuchte ).

Nachdem ich einige Korrekturen versucht habe, die bei Stack Overflow und anderswo gefunden wurden (weitere Details unten), bin ich an einem Punkt angelangt, an dem das Laden rJavaoder eines davon abhängigen Pakets rJavanicht mehr zum Absturz von R führt, sondern 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 über die Befehlszeile aufrufe und dann rJavaein Paket lade , von dem rJavaes abhängt , scheint es zu funktionieren (oder zumindest erhalte ich keine Fehlermeldungen).

Ich habe verschiedene Korrekturversuche versucht, einige davon einige Male, und kann mich nicht genau erinnern, was ich in welcher Reihenfolge getan habe (wusste nicht, dass dies so ein Morast sein würde und habe nicht wirklich den Überblick behalten). , aber hier ist das Wesentliche:

  • Folgendes zu meiner hinzugefügt .bash_profile(gemäß dieser SO-Antwort ):

    export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
    export LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / server

  • Java über die Befehlszeile wie folgt neu konfiguriert:

    sudo R CMD javareconf -n

  • Überprüft options("java.home")und festgestellt, dass dies eingestellt war NULL. Ich habe versucht, Folgendes einzustellen (gemäß dieser SO-Frage ):

    Optionen ("java.home" = "/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre")

  • Das neueste Java Development Kit installiert und rJavavon der Quelle neu installiert (ich kann mich nicht erinnern, wo ich das gefunden habe).

Irgendwann, als ich all dies ausprobierte, konnte ich laden, rJavaohne R zum Absturz zu bringen, aber stattdessen wurde die oben angegebene Fehlermeldung angezeigt. Wenn ich RStudio beende, scheint es außerdem normal zu schließen, aber dann wird die Meldung "RStudio wird unerwartet beendet" angezeigt, die darauf hinweist, dass das Programm beim Versuch, das Programm zu schließen, abgestürzt ist.

Ich entschied mich schließlich, Java für OS X 2014-001 (Java 6) zu installieren , da mir anscheinend die Optionen ausgehen. Als 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 oben angegebene .onLoad failed in loadNamespace() for 'rJava'Fehlermeldung erhalten.

Beim Überprüfen einiger der Beiträge, die ich bereits angesehen hatte, bemerkte ich eine weitere SO-Antwort , die ich zuvor verpasst hatte. Sie empfahl, RStudio mit dem folgenden Befehlszeilencode zu öffnen, der RStudio den richtigen Pfad zu Java gibt:

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

Das öffnete ein RStudio-Fenster und ich konnte auch davon rJavaabhängige Pakete laden , ohne einen Fehler zu erhalten.

Zuletzt habe ich versucht, R über die Befehlszeile auszuführen (was ich vorher noch nicht getan hatte). Es stellt sich heraus, dass in der Befehlszeile das Laden rJavaoder ein Paket, das von der rJavaArbeit abhängt und keine Fehler auslöst.

Ich kann jetzt rJavaarbeiten, wenn ich RStudio über die Befehlszeile 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, so wie es auch sein mag, damit RStudio auf die übliche Mac-Weise geöffnet werden kann, ohne dass ein Befehlszeilen-Kludge erforderlich ist. Ich mache mir auch Sorgen, dass die Installation einer alten Java-Version später zu Problemen führen könnte.

Hat jemand Ideen, wie dieses Problem diagnostiziert und gelöst werden kann?


Funktioniert diese Lösung in El Capitan noch für Sie? Ich habe das zum Laufen gebracht, bevor ich den LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudioTrick benutzt habe, aber es funktioniert nicht mehr. Ich habe einen Blog-Beitrag zu diesem Problem geschrieben und dieses Problem dort beschrieben. Ich frage mich, ob dieses Problem auch bei anderen in dieser Konfiguration auftritt oder ob es meine Schuld ist.
Paul Klemm

Ich benutze immer noch Yosemite, also bin ich mir nicht sicher. Unten finden Sie eine Antwort zu El Capitan.
eipi10

Ok, ich denke ich werde dann eine neue Frage stellen. Ja, die El Capitanunten stehende Lösung ist hilfreich, sobald sie RStudiogeladen wirdrJava wie erwartet.
Paul Klemm

2
Es hat funktioniert, nachdem ich RStudio neu gestartet habe
Pranay Aryal

Versuchen Sie es bei der Diagnose otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so eine Liste der gemeinsam genutzten Bibliotheken und deren Auflösung abzurufen. Ich bin nicht sicher, wie ich den Laufzeitinhalt von ermitteln soll @rpath.
Dave X

Antworten:


279

Ich hatte das gleiche Problem und ging die gleichen Schritte durch wie Sie. Der letzte Schritt, um das Starten von RStudio über Finder / Spotlight zu ermöglichen, bestand darin, libjvm.dylib mit / usr / local / lib zu verknüpfen:

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

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


4
Es wurde daran gearbeitet, dasselbe Problem zu beheben, wenn das Upgrade von El Capitan auf Sierra abgeschlossen ist. +1
Murta

2
Dies löste viele Probleme; vor allem, wenn der ursprüngliche Fehler cannot jfindclass[[1]]von rJava und einem JDBC-Treiber stammt
Jenks

1
Ich muss diesen Befehl jedes Mal ausführen, wenn ich Java auf meinem Macbook Pro aktualisiere. Es funktioniert immer noch unter MacOS Sierra 10.12.5 und Java Version 8 Update 141.
Thiagoveloso

11
Das hat bei mir fast geklappt. Zusätzlich musste ich der /usr/local/lib/libjvm.dylibDatei einen Symlink im R-Framework hinzufügen , da / usr / local / lib / nicht auf dem @rpath zu sein scheint. Zum Beispiel:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X


53

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

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

29

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)

Sicher sicher, aber nicht bequem. Die akzeptierte Antwort ist wahrscheinlich eine bessere Option. +1für eine Alternative anzubieten.
Thiagoveloso

27

Unter macOS High Sierra (10.13.1) und Java Version 9 müssen Sie einen etwas anderen JVM-Pfad verwenden (beachten Sie den fehlenden jreOrdner 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/

Genial. Das hat funktioniert! Es scheint, dass Vorschläge für El Capitan nicht für Sierra
KarthikS

Vielen Dank, das hat auch bei mir funktioniert. macOS High Sierra 10.13.2
pat_krat

Das hat mir geholfen. Ich habe den Benachrichtigungsteil R nicht ausgeführt. Es hat immer noch funktioniert. Vielen Dank :)
Harish

17

Der folgende Befehl funktioniert:

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

Danach funktioniert das Laden von rJava in RStudio durch Laden des Pakets "xlsx".

library("xlsx")

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

PS # 2 Ich finde, dass openxlsxdas viel schneller ist und nicht auf Java angewiesen ist, also verwende ich jetzt dieses Paket. Hoffe das hilft anderen.


1
Danke mein Freund, du hast meinen Tag gerettet. Ich habe versucht, andere Lösungen zu finden, aber dies war die Lösung, die mein Problem gelöst hat.
Matteo De Felice

1
Ein anderer El Cap-Benutzer (der jedoch die MacGUI verwendet) mit einem Dankesvotum. Versuchte dies seit dem ersten Mal, da es am einfachsten erscheint (und frühere Versuche mit Anweisungen zur Installation von Java Runtime 1.6 hatten das Problem nicht gelöst) und sofortiger Erfolg mit pkg: rJava und Abhängigkeit pkg; XLConnect. Möglicherweise muss das ältere Java 1.6 installiert werden, das von Oracle verfügbar und von der Apple-Seite verlinkt ist.
IRTFM

1
Hallo, dein Rat funktioniert auch mit MacOS High Sierra, vielen Dank !!
user8193079

1
openxlsxFTW!
iled

Ja! @iled: Ich stimme zu, besser openxlsxsowieso verwenden.
Sander W. van der Laan

7

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

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries

6

So habe ich es auf zwei Macs mit Mac OS X El Capitan (10.11.6) richtig 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 /Users/<userid>/.bashrcIhrem Lieblingseditor die folgenden Zeilen 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 neu (um die Änderungen zu übernehmen .bashrc).

  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")'

Ich erhalte einen Licuuc Library / Linker-Fehler, während ich dem folge. Können Sie das erklären? Der Versuch, unter macOS Sierra zu installieren, finden Sie hier (früher in El Capitan).
hhh

5

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 diesen Befehl ein: sudo R CMD javareconf
  5. Öffnen Sie R und installieren Sie rJava mit dem folgenden Befehl:

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


Ich habe das tatsächlich getan, bevor ich hier gelandet bin. Dadurch wurde meine rjava-abhängige Bibliothek installiert, aber nicht gestartet. Die Verknüpfung von libjvm.dylibin /usr/local/libmachte es auch beginnen :)
jonalv

3

Das Problem mit dem nicht gefundenen Image tritt bei einer brandneuen Installation unter OSX High Sierra mit dem neuesten Java SE 10 JDK auf.

Ich konnte das Pfadproblem mit rJava mithilfe des Fixes auf der Seite mit den rJava Github-Problemen lösen: https://github.com/su/rJava/issues/78

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


1

Hier, was für mich auf MAC funktioniert hat:

  1. in Ihrer ~/.profileoder ~/.bashrcfügen Sie diese 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. Laden Sie Ihre library("rJava", "RWeka")

Viel Glück.


1

Vielleicht eine andere 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.jdkdurch Ihren JDK-Pfad.)


2
Ich habe Homebrew R und der genaue Befehl, der für mich funktioniert hat, ist : install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/server /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so. Ich konnte sehen, dass der Pfad mitotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian

@Ian vielleicht wissen Sie , eine Lösung für diese hier , wo ich Java mit Homebrew installiert haben und nun versuchen , rjava zum Laufen zu bringen. Ideen?
hhh

1

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

Versuchen Sie dies, in meinem Fall hat dies funktioniert:

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

1

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 funktioniert.

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


1

Ich habe festgestellt, dass 'rJava' beim Laden in Rstudio ziemlich streng mit der JDK-Version ist.
In meinem Fall (Mac OS. 10.14.6 - Mojave) hatte ich jdk-13 installiert, das gegen jdk-11 getestet wurde.
Ich habe meine JDK-Version mit einem nicht vorhandenen Verzeichnis verknüpft, das von Rstudio als gültig angenommen wurde (JDK 11):

sudo ln -sf /Library/Java/JavaVirtualMachines/jdk-13.jdk/ /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk

und überraschenderweise funktioniert es wie ein Zauber ... Übrigens
gab es kein Problem, 'rJava' gemäß den vorherigen Anweisungen in native R auszuführen.



0

Diese Zeile unten hat das gleiche Problem gelöst, das ich mit dem rJavaPaket hatte, wie einige andere in dieser Diskussion. Ich bin mir sicher, dass es mehr als eine Lösung für dieses Problem gibt, und ich danke ihnen allen aufrichtig für ihre Beiträge, denn manchmal spart eine Zeile wie die folgende viel Zeit, um in den Papierkorb zu gelangen!

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

0

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

Einige der oben genannten Lösungen haben dies erwähnt, aber sie schlagen auch vor, das rJavaPaket zu entfernen und anschließend erneut zu installieren . Ich fand diese zusätzlichen Schritte unnötig.


Ich habe Ihre Lösung ausprobiert, sudo R CMD javareconfaber die library(rJava)gibt immer noch die gleichen Fehler: Error: package or namespace load failed for ‘rJava’: .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.5/Resources/library/rJava/libs/rJava.so': ... Reason: image not found
Lazarus Thurston

0

Sie können die Referenz in R mit dem folgenden Befehl ändern:

sudo install_name_tool -change /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.