web-dev-qa-db-fra.com

erreur de chargement rJava dans RStudio/R après la "mise à niveau" vers OSX Yosemite

J'ai récemment "mis à niveau" d'OSX Mountain Lion vers Yosemite et de R 3.1.3 à 3.2. Immédiatement après la mise à niveau, lorsque j'ai ouvert R ou RStudio, un message contextuel m'informant que je devais installer Java 6. De plus, le chargement de rJava ou de tout paquet dépendant de rJava (par exemple, xlsx) a provoqué le blocage de RStudio (R également écrasé lorsque j’ai essayé en ouvrant le R.app directement). 

Après avoir essayé quelques correctifs trouvés sur Stack Overflow et ailleurs (plus de détails ci-dessous), le chargement de rJava ou de tout package dépendant de rJava ne provoque plus le blocage de R, mais le résultat de 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'invoque R depuis la ligne de commande puis que je charge rJava ou tout package dépendant de rJava, cela semble fonctionner (ou du moins je ne reçois aucun message d'erreur).

J'ai essayé plusieurs solutions, dont certaines à quelques reprises, et je ne me souviens plus très bien de ce que j'ai fait dans quel ordre (je ne savais pas que ce serait un tel bourbier et je ne gardais pas vraiment la trace). , mais voici l'essentiel:

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

    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 cela a été défini sur NULL. J'ai essayé de le définir comme suit (pour cette SO question ):

    options ("Java.home" = "/ Bibliothèque/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contenu/Accueil/jre")

  • Installation du dernier kit de développement Java et réinstallation de rJava à partir des sources (je ne me souviens plus de l'endroit où j'ai trouvé celui-ci).

À un moment donné, tout en essayant toutes ces solutions, j'ai pu charger rJava sans planter R, mais le message d'erreur ci-dessus a été affiché. En outre, lorsque je quitte RStudio, il semble se fermer normalement, mais un message «RStudio s’arrête inopinément» s’affiche, indiquant que le programme s’est écrasé lors de la fermeture. 

J'ai finalement décidé d'installer Java pour OS X 2014-001 (Java 6), car il me semblait qu'il me manquait d'options. Maintenant, lorsque j'ai ouvert R ou RStudio, le message contextuel "Ce logiciel a besoin de Java 6" n'apparaît plus. Cependant, le message d'erreur .onLoad failed in loadNamespace() for 'rJava' était encore affiché. 

En relisant certains 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 à utiliser. Java:

LD_LIBRARY_PATH = $ (/ usr/libexec/rép_base Java)/jre/lib/server: ouvre -a RStudio

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

Enfin, j'ai essayé de lancer R à partir de la ligne de commande (ce que je n'avais jamais fait auparavant). Il s'avère que sur la ligne de commande, le chargement de rJava ou de tout package dépendant de rJava fonctionne et ne génère aucune erreur.

Donc, je peux maintenant faire fonctionner rJava si j'ouvre RStudio à partir de la ligne de commande avec le code qui donne le chemin Java à RStudio (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 sur Mac, sans nécessiter de kludge en ligne de commande. Je crains également qu'une ancienne version de Java installée ne cause des problèmes par la suite. 

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

111
eipi10

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

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

Le drapeau -f est ajouté pour forcer le remplacement du fichier/lien existant

269
aseidlitz

Sur OSX El Capitan 10.11, l’utilisateur n’a pas l’autorisation d’écrire dans/usr/lib. Alors, utilisez plutôt la commande suivante:

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

Vous pouvez charger explicitement libjvm.dylib, en l’utilisant comme

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

Sur macOS High Sierra (10.13.1) et Java version 9, vous devez utiliser un chemin d'accès JVM légèrement différent (notez le dossier jre manquant dans le chemin d'accès 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 machine virtuelle Java:

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

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

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

P.S. # 2 Je trouve que openxlsx est beaucoup plus rapide et ne repose pas sur Java pour fonctionner. J'utilise donc ce paquet. J'espère que cela aide les autres.

17

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

  1. Désinstallez 'rJava' en lançant 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/fr/download/mac_download.jsp

  3. Ajoutez les lignes suivantes à /Users/<userid>/.bashrc en utilisant votre éditeur favori:

    # 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 enregistrer les modifications apportées à .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")'
    
6
Gregory R. Warnes

Vous devriez pouvoir utiliser CRAN rJava sans avoir à recompiler rJava ni effectuer aucune étape supplémentaire en reliant la bibliothèque partagée au répertoire de bibliothèque R frameworks.

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

Voici les étapes faciles pour cela:

  1. supprimer le paquet rJava: remove.packages (rJava)
  2. plus proche
  3. installer la dernière version de 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")

Le problème d’image introuvable correspond à une nouvelle installation sur OSX High Sierra avec le dernier JDK Java SE 10.

J'ai été en mesure de 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/s-u/rJava/issues/78

R CMD javareconf Java_CPPFLAGS = -I/Système/Bibliothèque/Frameworks/JavaVM.framework/En-têtes 

3
Galen

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
Sagar Neel De

J'ai parcouru tous les dépannages que j'ai pu trouver, puis j'ai installé jdk-11.0.1_osx-x64_bin.dmg à partir de: téléchargements Oracle

Tout fonctionnait parfaitement après cela.

Vérifiez la version de la bibliothèque qui n'a pas été chargée lors de l'exécution de la bibliothèque ('rJava') et faites-la correspondre à la version Java que vous devez installer.

1
user2428818

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.jdk par votre chemin JDK.)

1
mokjpn

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

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

Vous pouvez télécharger ici l'ancienne version 6 de Java pour El Capitan: https://support.Apple.com/kb/DL1572?viewlocale=en_US&locale=en_US Après cela, le package rJava fonctionne pour moi.

0
ignazw

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

Plusieurs solutions ci-dessus l'ont mentionné, mais elles suggèrent également de supprimer et de réinstaller par la suite le package rJava. J'ai trouvé ces étapes supplémentaires inutiles.

0
Megatron