Errore di caricamento di Java in RStudio / R dopo l '"aggiornamento" a OSX Yosemite


122

Recentemente ho "aggiornato" da OSX Mountain Lion a Yosemite e da R 3.1.3 a 3.2. Immediatamente dopo l'aggiornamento, quando ho aperto R o RStudio ho ricevuto un messaggio pop-up che diceva che dovevo installare Java 6. Inoltre, il caricamento rJavao qualsiasi pacchetto che dipende da rJava (ad esempio xlsx) ha causato l'arresto anomalo di RStudio (anche R si è bloccato quando l'ho provato aprendo R.appdirettamente).

Dopo aver provato alcune correzioni trovate su Stack Overflow e altrove (maggiori dettagli di seguito), sono a un punto in cui il caricamento rJavao qualsiasi pacchetto che dipende da rJavanon causa più il blocco di R, ma genera il seguente errore:

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

Tuttavia, se invoco R dalla riga di comando e quindi carico rJavao qualsiasi pacchetto da cui dipende rJava, sembra funzionare (o almeno non ricevo alcun messaggio di errore).

Ho provato una serie di diversi tentativi di soluzioni, alcune alcune volte, e non riesco a ricordare esattamente cosa ho fatto in quale ordine (non mi rendevo conto che sarebbe stato un tale pantano e non stavo davvero tenendo traccia) , ma ecco il succo:

  • Aggiunto quanto segue al mio .bash_profile(per questa risposta SO ):

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

  • Java riconfigurato dalla riga di comando come segue:

    sudo R CMD javareconf -n

  • Controllato options("java.home")e scoperto che era impostato su NULL. Ho provato a impostarlo come segue (per questa domanda SO ):

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

  • rJavaHo installato l'ultimo Java Development Kit e reinstallato dalla sorgente (non ricordo dove l'ho trovato).

Ad un certo punto, mentre provavo tutti questi, sono stato in grado di caricare rJavasenza arrestare R, ma invece ho ricevuto il messaggio di errore pubblicato sopra. Inoltre, quando esco da RStudio, sembra che si chiuda normalmente, ma poi viene visualizzato un messaggio "RStudio si è chiuso in modo imprevisto", indicando che il programma si è bloccato durante il tentativo di chiusura.

Alla fine ho deciso di installare Java per OS X 2014-001 (Java 6), poiché mi sembrava di essere a corto di opzioni. Ora, quando ho aperto R o RStudio, il messaggio pop-up "Questo software richiede Java 6" non è più apparso. Tuttavia, stavo ancora ricevendo il .onLoad failed in loadNamespace() for 'rJava'messaggio di errore pubblicato sopra.

Nel rivedere alcuni dei post che avevo già letto, ho notato un'altra risposta SO che mi ero perso prima, che consigliava di aprire RStudio con il seguente codice della riga di comando che fornisce a RStudio il percorso corretto per java:

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

Ciò ha aperto una finestra di RStudio e sono stato anche in grado di caricare rJavae pacchetti che dipendono da esso senza ottenere un errore.

Infine, ho provato a eseguire R dalla riga di comando (cosa che non avevo fatto prima). Si scopre che sulla riga di comando, il caricamento rJavao qualsiasi pacchetto che dipende da rJavafunziona e non genera errori.

Quindi, ora posso mettermi rJavaal lavoro se apro RStudio dalla riga di comando con il codice che fornisce a RStudio il percorso java (come indicato sopra). Tuttavia, mi piacerebbe trovare un modo per risolvere il problema sottostante, qualunque esso sia, in modo che RStudio possa essere aperto nel solito modo Mac, senza bisogno di kludge da riga di comando. Sono anche preoccupato che avere una vecchia versione di Java installata possa causare problemi lungo la strada.

Qualcuno ha qualche idea su come diagnosticare e risolvere questo problema?


Questa soluzione funziona ancora per te a El Capitan? Ho funzionato prima di usare il LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudiotrucco, ma non funziona più. Ho scritto un post sul blog riguardante questo problema e ho descritto questo problema lì. Chissà se anche altri sperimentano questo problema in questa configurazione o se è colpa mia.
Paul Klemm

Sto ancora usando Yosemite, quindi non sono sicuro. Vedi sotto per una risposta relativa a El Capitan.
eipi10

Ok, penso che posterò una nuova domanda allora. Sì, la El Capitansoluzione seguente è utile non appena viene RStudiocaricata rJavacome previsto.
Paul Klemm

2
Ha funzionato dopo aver riavviato RStudio
Pranay Aryal

Durante la diagnosi, prova otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so a ottenere un elenco delle librerie condivise e come vengono risolte. Non sono sicuro di come scoprire i contenuti di runtime di @rpath.
Dave X

Risposte:


279

Ho avuto lo stesso problema e ho seguito i tuoi stessi passaggi. Il passaggio finale per consentire l'avvio di RStudio tramite Finder / Spotlight è stato il collegamento di libjvm.dylib a / usr / local / lib:

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

-f viene aggiunto il flag per forzare la sovrascrittura del file / collegamento esistente


4
Ha lavorato per risolvere lo stesso problema al termine dell'aggiornamento da El Capitan a Sierra. +1
Murta

2
Questo ha risolto molti problemi; soprattutto se l'errore originale proviene da cannot jfindclass[[1]]che potrebbe provenire da rJava e da un driver JDBC
Jenks

1
Devo eseguire questo comando ogni volta che aggiorno Java sul mio Macbook Pro. Funziona ancora su macOS Sierra 10.12.5 e Java versione 8 Update 141.
thiagoveloso

11
Questo ha quasi funzionato per me. Inoltre ho dovuto aggiungere un collegamento simbolico nel framework R al /usr/local/lib/libjvm.dylibfile, poiché / usr / local / lib / non sembra essere su @rpath. Ad esempio:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X


53

Su OSX El Capitan 10.11, l'utente non ha il permesso di scrivere in / usr / lib. Quindi, usa il seguente comando:

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

29

Puoi caricare il libjvm.dylib esplicitamente, eseguendo come

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

Possibile di sicuro, ma non conveniente. La risposta accettata è probabilmente un'opzione migliore. +1per offrire un'alternativa però.
thiagoveloso

27

Su macOS High Sierra (10.13.1) e Java Versione 9 devi utilizzare un percorso JVM leggermente diverso (nota la jrecartella mancante nel percorso rispetto alle istruzioni per le versioni precedenti di Java):

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

Devi anche notificare a R la JVM:

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/

Eccezionale. Ha funzionato! Sembra che i suggerimenti per El Capitan non funzionino per Sierra
KarthikS

Grazie mille, ha funzionato anche per me. macOS High Sierra 10.13.2
pat_krat

Questo mi ha aiutato. Non ho fatto la parte R di notifica. Funzionava ancora. Grazie mille :)
Harish

17

Il seguente comando funziona:

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

Dopodiché, in RStudio, il caricamento di rJava funziona tramite il caricamento del pacchetto "xlsx".

library("xlsx")

Ambiente PS # 1: Mac OS X El Capitan 10.11.3+ con RStudio 0.99.491+ e R 3.2.3+. (Ora l'ho testato anche su macOS Sierra (10.12) e R.3.3.1.)

PS # 2 Trovo che openxlsxsia molto più veloce e non si basi su Java per funzionare, quindi ora sto usando quel pacchetto. Spero che aiuti gli altri.


1
grazie amico mio, mi hai salvato la giornata. Ho provato con altre soluzioni trovate in giro, ma questa è stata quella che ha risolto il mio problema.
Matteo De Felice

1
Un altro utente di El Cap (ma utilizza il MacGUI) con un voto di ringraziamento. Ho provato questo sin dall'inizio poiché sembra più semplice (e gli sforzi precedenti con le indicazioni per l'installazione di Java runtime 1.6 non avevano risolto il problema) e il successo immediato con pkg: rJava e la dipendenza pkg; XLConnect. Potrebbe essere necessario installare la versione precedente di Java 1.6 disponibile da Oracle e collegata dalla pagina Apple.
IRTFM

1
Ciao, il tuo consiglio funziona anche con MacOS High Sierra, grazie mille !!
user8193079

1
openxlsxFTW!
iled

Sì! @iled: sono d'accordo, meglio usare openxlsxcomunque.
Sander W. van der Laan

7

Dovresti essere in grado di utilizzare CRAN rJava, senza dover ricompilare rJava o eseguire ulteriori passaggi collegando la libreria condivisa alla directory della libreria R frameworks.

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

6

Ecco come l'ho configurato funzionando correttamente su due Mac con Mac OS X El Capitan (10.11.6):

  1. Disinstallare 'rJava' immettendo i seguenti comandi in una finestra di terminale:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Scarica e installa il software Java da Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Aggiungi le seguenti righe per /Users/<userid>/.bashrcutilizzare il tuo editor preferito:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Chiudi e riavvia tutte le finestre di terminale, R e RStudio (per acquisire le modifiche .bashrc).

  5. Esegui il seguente comando in una finestra di Terminale:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Esegui il seguente comando in una finestra di Terminale:

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

Sto ricevendo un errore di libreria / linker licuuc mentre seguo questo, sei in grado di spiegare? Tentativo di installazione su macOS Sierra, altro qui (all'inizio di El Capitan).
hhh

5

Ecco i semplici passaggi per farlo:

  1. rimuovere il pacchetto rJava: remove.packages (rJava)
  2. più vicino
  3. installa l'ultima versione di Java sul tuo mac
  4. apri il terminale e digita questo comando: sudo R CMD javareconf
  5. Apri R e installa rJava con questo comando:

    install.packages ("rJava", dependencies = TRUE, type = "source")


In realtà l'ho fatto prima di finire qui. Ha fatto installare la mia libreria dipendente da rjava ma non è stata avviata. Anche il collegamento di libjvm.dylibinto ha /usr/local/libavuto inizio :)
jonalv

3

Il problema relativo all'immagine non trovata esiste con una nuova installazione su OSX High Sierra con l'ultimo Java SE 10 JDK.

Sono stato in grado di risolvere il problema del percorso con rJava utilizzando la correzione trovata nella pagina dei problemi di rJava Github: https://github.com/su/rJava/issues/78

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


1

Ecco cosa ha funzionato per me su MAC:

  1. nel tuo ~/.profileo ~/.bashrcaggiungi questa riga: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(o % 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. Dal terminale inserisci questo comando: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Carica il tuo library("rJava", "RWeka")

Buona fortuna.


1

Forse un'altra semplice risposta che non tocca il tuo filesystem:

$ 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

(Sostituisci jdk1.8.0_131.jdkcon il tuo percorso JDK.)


2
Ho homebrew R, e il comando esatto che ha funzionato per me è: 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. Sono stato in grado di vedere che mancava l'rpath conotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian

@Ian forse conosci una soluzione a questo qui dove ho installato Java con Homebrew e ora sto cercando di far funzionare rJava. Idee?
hhh

1

Controlla la posizione del file libjvm.dylib.

Prova questo, nel mio caso ha funzionato:

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

1

Ho esaminato tutta la risoluzione dei problemi che sono riuscito a trovare, quindi ho installato jdk-11.0.1_osx-x64_bin.dmg da: download Oracle

Tutto ha funzionato perfettamente dopo.

Controlla la versione della libreria che non è stata caricata quando esegui la libreria ('rJava') e abbinala alla versione java che devi installare.


1

Ho notato che "rJava" è piuttosto severo sulla versione JDK durante il caricamento in Rstudio.
Nel mio caso (Mac OS. 10.14.6 - Mojave) avevo installato jdk-13 che è stato testato contro jdk-11.
Ho collegato la mia versione JDK a una directory inesistente che si presumeva fosse valida da Rstudio (JDK 11):

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

e sorprendentemente funziona come un incantesimo ... A
proposito, non ci sono stati problemi a eseguire 'rJava' seguendo le istruzioni precedenti nel nativo R.



0

Questa riga di seguito ha risolto lo stesso problema che stavo avendo con il rJavapacchetto come hanno fatto altri in questa discussione. Sono sicuro che ci sono più soluzioni a questo problema e li ringrazio sinceramente tutti per il loro contributo perché a volte una riga come quella qui sotto risparmia molto tempo dall'andare nel cestino!

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

0

Eseguire quanto segue sulla riga di comando: sudo R CMD javareconf

Diverse soluzioni sopra hanno menzionato questo, ma suggeriscono anche di rimuovere e successivamente reinstallare il rJavapacchetto. Ho trovato questi passaggi aggiuntivi non necessari.


Ho provato la tua soluzione sudo R CMD javareconfma library(rJava)dà ancora gli stessi errori: 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

È possibile modificare il riferimento in R utilizzando il seguente comando:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.