Erreur de chargement rJava dans RStudio / R après la «mise à niveau» vers OSX Yosemite


122

J'ai récemment "mis à jour" d'OSX Mountain Lion vers Yosemite et de R 3.1.3 vers 3.2. Immédiatement après la mise à niveau, lorsque j'ai ouvert R ou RStudio, j'ai reçu un message contextuel disant que je devais installer Java 6. De plus, le chargement rJavaou tout paquet qui dépend de rJava (par exemple xlsx) a causé le crash de RStudio (R a également planté quand j'ai essayé cela en ouvrant R.appdirectement).

Après avoir essayé quelques correctifs trouvés sur Stack Overflow et ailleurs (plus de détails ci-dessous), je suis à un point où le chargement rJavaou tout package qui en dépend rJavane provoque plus le plantage de R, mais entraîne l'erreur suivante:

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

Cependant, si j'appelle R à partir de la ligne de commande et que je charge ensuite rJavaou tout package qui en dépend rJava, cela semble fonctionner (ou du moins je ne reçois aucun message d'erreur).

J'ai essayé un certain nombre de tentatives de corrections différentes, certaines à quelques reprises, et je ne me souviens pas exactement de ce que j'ai fait dans quel ordre (je ne savais pas que ce serait un tel bourbier et ne suivait pas vraiment) , mais voici l'essentiel:

  • Ajout de ce qui suit à mon .bash_profile(par cette réponse SO ):

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

  • Java reconfiguré à partir de la ligne de commande comme suit:

    sudo R CMD javareconf -n

  • Vérifié options("java.home")et découvert que ce paramètre était défini sur NULL. J'ai essayé de le configurer comme suit (par cette question SO ):

    options ("java.home" = "/ Bibliothèque / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre")

  • Installé le dernier kit de développement Java et réinstallé à rJavapartir de la source (je ne me souviens pas où j'ai trouvé celui-là).

À un moment donné, en essayant tout cela, j'ai pu charger rJavasans planter R, mais j'ai plutôt reçu le message d'erreur ci-dessus. De plus, lorsque je quitte RStudio, il semble se fermer normalement, mais un message "RStudio quitte inopinément" apparaît alors, indiquant que le programme s'est écrasé en essayant de se fermer.

J'ai finalement décidé d'installer Java pour OS X 2014-001 (Java 6), car je semblais manquer d'options. Maintenant, lorsque j'ai ouvert R ou RStudio, le message contextuel "Ce logiciel a besoin de Java 6" n'apparaissait plus. Cependant, je recevais toujours le .onLoad failed in loadNamespace() for 'rJava'message d'erreur ci-dessus.

En examinant certains des articles que j'avais déjà consultés, j'ai remarqué une autre réponse SO que j'avais manquée auparavant, qui recommandait d'ouvrir RStudio avec le code de ligne de commande suivant qui donne à RStudio le chemin correct vers java:

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

Cela a ouvert une fenêtre RStudio et j'ai également pu charger rJavaet les packages qui en dépendent sans obtenir d'erreur.

Enfin, j'ai essayé d'exécuter R à partir de la ligne de commande (ce que je n'avais pas fait auparavant). Il s'avère que sur la ligne de commande, le chargement rJavaou tout autre package qui dépend de rJavafonctionne et ne génère aucune erreur.

Donc, je peux maintenant me mettre rJavaau travail si j'ouvre RStudio à partir de la ligne de commande avec le code qui donne à RStudio le chemin java (comme indiqué ci-dessus). Cependant, j'aimerais trouver un moyen de résoudre le problème sous-jacent, quel qu'il soit, afin que RStudio puisse être ouvert de la manière habituelle de Mac, sans avoir besoin d'un kludge de ligne de commande. Je crains également que l'installation d'une ancienne version de Java puisse causer des problèmes ultérieurement.

Quelqu'un a-t-il des idées sur la façon de diagnostiquer et de résoudre ce problème?


Cette solution fonctionne-t-elle toujours pour vous à El Capitan? J'ai fait fonctionner cela avant d'utiliser l' LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudioastuce, mais cela ne fonctionne plus. J'ai écrit un article de blog concernant ce problème et j'y ai décrit ce problème. Je me demande si d'autres rencontrent ce problème aussi dans cette configuration ou si c'est de ma faute.
Paul Klemm

J'utilise toujours Yosemite, donc je ne suis pas sûr. Voir ci-dessous pour une réponse relative à El Capitan.
eipi10

Ok, je pense que je publierai une nouvelle question alors. Oui, la El Capitansolution ci-dessous est utile dès que les RStudiocharges rJavasont attendues.
Paul Klemm

2
Cela a fonctionné après avoir redémarré RStudio
Pranay Aryal

Lors du diagnostic, essayez otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so d'obtenir une liste des bibliothèques partagées et comment elles sont résolues. Je ne sais pas comment découvrir le contenu d'exécution de @rpath.
Dave X

Réponses:


279

J'ai eu le même problème et j'ai suivi les mêmes étapes que vous. La dernière étape pour permettre le démarrage de RStudio via Finder / Spotlight était de lier libjvm.dylib à / usr / local / lib:

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

-f L'indicateur est ajouté pour forcer l'écrasement du fichier / lien existant


4
Travaillé pour résoudre le même problème lorsque la mise à niveau d'El Capitan vers Sierra est terminée. +1
Murta

2
Cela a résolu beaucoup de problèmes; surtout si l'erreur d'origine vient de cannot jfindclass[[1]]rJava et d'un pilote JDBC
Jenks

1
Je dois exécuter cette commande chaque fois que je mets à jour Java sur mon Macbook Pro. Il fonctionne toujours sur macOS Sierra 10.12.5 et Java Version 8 Update 141.
thiagoveloso

11
Cela a presque fonctionné pour moi. De plus, j'ai dû ajouter un lien symbolique dans le framework R au /usr/local/lib/libjvm.dylibfichier, car / usr / local / lib / ne semble pas être sur le @rpath. Par exemple:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X

1
...

53

Sous OSX El Capitan 10.11, l'utilisateur n'a pas l'autorisation d'écrire dans / usr / lib. Alors à la place, utilisez la commande suivante:

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

29

Vous pouvez charger le libjvm.dylib explicitement, en exécutant comme

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

Possible à coup sûr, mais pas pratique. La réponse acceptée est probablement une meilleure option. +1pour offrir une alternative cependant.
thiagoveloso

27

Sur macOS High Sierra (10.13.1) et Java Version 9, vous devez utiliser un chemin JVM légèrement différent (notez le jredossier manquant dans le chemin par rapport aux instructions des versions précédentes de Java):

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

Vous devez également informer R de 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/

Impressionnant. Ça a marché! Il semble que les suggestions pour El Capitan ne fonctionnent pas pour Sierra
KarthikS

Merci beaucoup, cela a fonctionné pour moi aussi. macOS High Sierra 10.13.2
pat_krat

Cela m'a aidé. Je n'ai pas fait la partie Notifier R. Cela fonctionnait toujours. Merci beaucoup :)
Harish

17

La commande suivante fonctionne:

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

Après cela, dans RStudio, le chargement de rJava se fait par le chargement du paquet "xlsx".

library("xlsx")

Environnement PS # 1: Mac OS X El Capitan 10.11.3+ avec RStudio 0.99.491+ et R 3.2.3+. (J'ai maintenant testé cela également sur macOS Sierra (10.12) et R.3.3.1.)

PS # 2 Je trouve que openxlsxc'est beaucoup plus rapide et ne repose pas sur Java pour fonctionner, alors j'utilise maintenant ce package. J'espère que cela aide les autres.


1
merci mon ami, tu as sauvé ma journée. J'ai essayé avec d'autres solutions trouvées autour mais c'est celle qui a résolu mon problème.
Matteo De Felice

1
Un autre utilisateur d'El Cap (mais utilisant le MacGUI) avec un vote de remerciement. J'ai essayé cela depuis la première fois car cela semble le plus simple (et les efforts précédents avec des instructions pour installer Java runtime 1.6 n'avaient pas résolu le problème) et un succès immédiat avec pkg: rJava et dependency pkg; XLConnect. Il peut être nécessaire d'installer l'ancien Java 1.6 disponible auprès d'Oracle et lié à partir de la page Apple.
IRTFM

1
Salut, vos conseils fonctionnent également avec MacOS High Sierra, merci beaucoup !!
user8193079

1
openxlsxFTW!
iled

Oui! @iled: Je suis d'accord, mieux vaut openxlsxquand même l' utiliser .
Sander W. van der Laan

7

Vous devriez pouvoir utiliser le CRAN rJava, sans avoir besoin de recompiler rJava ou d'effectuer des étapes supplémentaires en liant la bibliothèque partagée au répertoire de la bibliothèque de frameworks R.

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

6

Voici comment je l'ai configuré pour fonctionner correctement sur deux Mac exécutant Mac OS X El Capitan (10.11.6):

  1. Désinstallez 'rJava' en exécutant les commandes suivantes dans une fenêtre de terminal:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Téléchargez et installez le logiciel Java à partir d'Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Ajoutez les lignes suivantes à l' /Users/<userid>/.bashrcutilisation de votre éditeur préféré:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Fermez et redémarrez toutes les fenêtres de terminal, R et RStudio (pour récupérer les modifications .bashrc).

  5. Exécutez la commande suivante dans une fenêtre de terminal:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Exécutez la commande suivante dans une fenêtre de terminal:

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

Je reçois une erreur de bibliothèque / éditeur de liens licuuc en suivant ceci, pouvez-vous m'expliquer? Essayer d'installer sur macOS Sierra, plus ici (plus tôt dans El Capitan).
hhh

5

Voici les étapes faciles pour cela:

  1. supprimer le package rJava: remove.packages (rJava)
  2. plus proche
  3. installez le dernier Java sur votre mac
  4. ouvrez le terminal et tapez cette commande: sudo R CMD javareconf
  5. Ouvrez R et installez rJava avec cette commande:

    install.packages ("rJava", dépendances = TRUE, type = "source")


En fait, je l'ai fait avant de me retrouver ici. Cela a rendu ma bibliothèque dépendante de rjava installée mais n'a pas démarré. La liaison de libjvm.dyliben /usr/local/liba également commencé :)
jonalv

3

Le problème d'image introuvable existe avec une toute nouvelle installation sur OSX High Sierra avec le dernier JDK Java SE 10.

J'ai pu résoudre le problème de chemin avec rJava en utilisant le correctif trouvé sur la page des problèmes de rJava Github: https://github.com/su/rJava/issues/78

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


1

Voici ce qui a fonctionné pour moi sur MAC:

  1. dans votre ~/.profileou ~/.bashrcajoutez cette ligne: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(ou % 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. Depuis le terminal, entrez cette commande: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Chargez votre library("rJava", "RWeka")

Bonne chance.


1

Peut-être une autre réponse simple qui ne touche pas votre système de fichiers:

$ 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

(Remplacez jdk1.8.0_131.jdkpar votre chemin JDK.)


2
Je homebrew R, et la commande exacte qui a fonctionné pour moi: 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. J'ai pu voir que le chemin d'accès manquait avecotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian

@Ian peut-être connaissez-vous une solution à cela ici où j'ai installé Java avec Homebrew et j'essaie maintenant de faire fonctionner rJava. Des idées?
hhh

1

Vérifiez l'emplacement du fichier libjvm.dylib.

Essayez ceci, dans mon cas, cela a fonctionné:

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

1

J'ai parcouru tout le dépannage que j'ai pu trouver, puis j'ai installé jdk-11.0.1_osx-x64_bin.dmg à partir de: Téléchargements Oracle

Tout a parfaitement fonctionné après cela.

Vérifiez la version de la bibliothèque qui n'a pas été chargée lorsque vous exécutez la bibliothèque ('rJava') et faites-la correspondre à la version java dont vous avez besoin.


1

J'ai remarqué que 'rJava' est assez strict sur la version JDK lors du chargement dans Rstudio.
Dans mon cas (Mac OS. 10.14.6 - Mojave), j'avais installé jdk-13 qui a été testé contre jdk-11.
J'ai lié ma version JDK à un répertoire inexistant qui était supposé valide par Rstudio (JDK 11):

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

et étonnamment cela fonctionne comme un charme ...
BTW., il n'y avait aucun problème pour exécuter 'rJava' en suivant les instructions précédentes dans R. natif.



0

Cette ligne ci-dessous a résolu le même problème que j'avais avec le rJavapackage que certains autres dans cette discussion. Je suis sûr qu'il y a plus d'une solution à ce problème et je les remercie tous sincèrement pour leurs contributions car parfois une ligne comme celle ci-dessous permet de gagner beaucoup de temps avant d'aller à la poubelle!

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

0

Exécutez ce qui suit sur la ligne de commande: sudo R CMD javareconf

Plusieurs solutions ci-dessus ont mentionné cela, mais elles suggèrent également de supprimer puis de réinstaller le rJavapackage. J'ai trouvé ces étapes supplémentaires inutiles.


J'ai essayé votre solution sudo R CMD javareconfmais le library(rJava)donne toujours les mêmes erreurs: 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

Vous pouvez modifier la référence dans R à l'aide de la commande suivante:

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.