Error de carga de rJava en RStudio / R después de "actualizar" a OSX Yosemite

122

Recientemente "actualicé" de OSX Mountain Lion a Yosemite y de R 3.1.3 a 3.2. Inmediatamente después de la actualización, cuando abrí R o RStudio, recibí un mensaje emergente que decía que necesitaba instalar Java 6. Además, la carga rJavao cualquier paquete que dependa de rJava (por ejemplo, xlsx) causó que RStudio se bloqueara (R también se bloqueó cuando probé esto abriendo R.appdirectamente).

Después de probar algunas correcciones encontradas en Stack Overflow y en otros lugares (más detalles a continuación), estoy en un punto en el que cargar rJavao cualquier paquete que depende rJavaya no hace que R se bloquee, pero da como resultado el siguiente error:

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

Sin embargo, si invoco R desde la línea de comando y luego cargo rJavao cualquier paquete que depende rJava, parece funcionar (o al menos no recibo ningún mensaje de error).

He intentado varios intentos diferentes de solución, algunos de ellos varias veces, y no puedo recordar exactamente lo que hice en qué orden (no me di cuenta de que esto sería un pantano y realmente no estaba siguiendo la pista) , pero aquí está la esencia de esto:

  • Agregué lo siguiente a mi .bash_profile(según esta respuesta SO ):

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

  • Java reconfigurado desde la línea de comando de la siguiente manera:

    sudo R CMD javareconf -n

  • Comprobado options("java.home")y descubierto que esto se configuró en NULL. Intenté configurarlo de la siguiente manera (según esta pregunta SO ):

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

  • Instalé el último Kit de desarrollo de Java y lo reinstalé rJavadesde el origen (no recuerdo dónde encontré ese).

En algún momento al intentar todo esto, pude cargar rJavasin bloquear R, pero en su lugar recibí el mensaje de error publicado anteriormente. Además, cuando salgo de RStudio, parece que se cierra normalmente, pero luego aparece el mensaje "RStudio se cerró inesperadamente", indicando que el programa se ha bloqueado al intentar cerrar.

Finalmente decidí instalar Java para OS X 2014-001 (Java 6), ya que parecía estar quedando sin opciones. Ahora, cuando abrí R o RStudio, ya no aparecía el mensaje emergente "Este software necesita Java 6". Sin embargo, todavía recibía el .onLoad failed in loadNamespace() for 'rJava'mensaje de error publicado anteriormente.

Al revisar algunas de las publicaciones que ya había visto, noté otra respuesta SO que me había perdido antes, que recomendó abrir RStudio con el siguiente código de línea de comando que le da a RStudio la ruta correcta a Java:

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

Eso abrió una ventana de RStudio y también pude cargar rJavay paquetes que dependen de él sin obtener un error.

Por último, intenté ejecutar R desde la línea de comandos (que no había hecho antes). Resulta que en la línea de comandos, la carga rJavao cualquier paquete que dependa de las rJavaobras y no arroje ningún error.

Entonces, ahora puedo rJavatrabajar si abro RStudio desde la línea de comandos con el código que le da a RStudio la ruta de Java (como se indicó anteriormente). Sin embargo, me gustaría encontrar una manera de solucionar el problema subyacente, sea cual sea, para que RStudio se pueda abrir de la manera habitual en Mac, sin necesidad de una línea de comando kludge. También me preocupa que tener instalada una versión anterior de Java pueda causar problemas en el futuro.

¿Alguien tiene alguna idea sobre cómo diagnosticar y resolver este problema?

eipi10
fuente
¿Esta solución aún te funciona en El Capitan? Lo hice funcionar antes de usar el LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudiotruco, pero ya no funciona. He escrito una entrada de blog sobre este tema y describió este problema existe. Me pregunto si otros también experimentan este problema en esta configuración o si es mi culpa.
Paul Klemm
Todavía estoy usando Yosemite, así que no estoy seguro. Vea a continuación una respuesta relacionada con El Capitan.
eipi10
Ok, creo que publicaré una nueva pregunta entonces. Sí, la El Capitansolución a continuación es útil tan pronto como se RStudiocarga rJavacomo se esperaba.
Paul Klemm
2
Funcionó después de reiniciar RStudio
Pranay Aryal
En el diagnóstico, intente otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so obtener una lista de las bibliotecas compartidas y cómo se resuelven. No estoy seguro de cómo descubrir el contenido de tiempo de ejecución de @rpath.
Dave X

Respuestas:

279

Tuve el mismo problema y seguí los mismos pasos que tú. El último paso para permitir iniciar RStudio a través de Finder / Spotlight fue vincular libjvm.dylib a / usr / local / lib:

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

-f se agrega un indicador para forzar la sobrescritura de un archivo / enlace existente

Alex Popov
fuente
44
Trabajó para solucionar el mismo problema cuando se realizó la actualización de El Capitan a Sierra. +1
Murta
2
Esto resolvió muchos problemas; especialmente si el error original proviene de cannot jfindclass[[1]]rJava y un controlador JDBC
Jenks
1
Tengo que ejecutar este comando cada vez que actualizo Java en mi Macbook Pro. Todavía funciona en macOS Sierra 10.12.5 y Java Versión 8 Actualización 141.
thiagoveloso
11
Esto casi me funcionó. Además, tuve que agregar un enlace simbólico en el marco R al /usr/local/lib/libjvm.dylibarchivo, ya que / usr / local / lib / no parece estar en @rpath. Por ejemplo:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X
1
Esto puede ser útil github.com/snowflakedb/dplyr-snowflakedb/wiki/…
user2079550
53

En OSX El Capitan 10.11, el usuario no tiene permiso para escribir en / usr / lib. Entonces, en su lugar, use el siguiente comando:

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

Puede cargar el libjvm.dylib explícitamente, ejecutando como

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
yuan
fuente
Posiblemente seguro, pero no conveniente. La respuesta aceptada es probablemente una mejor opción. +1aunque por ofrecer una alternativa.
thiagoveloso
27

En macOS High Sierra (10.13.1) y Java Versión 9, debe usar una ruta JVM ligeramente diferente (observe la jrecarpeta que falta en la ruta en comparación con las instrucciones para versiones anteriores de Java):

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

También debe notificar a R sobre 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/
Endre
fuente
Increíble. ¡Eso funciono! Parece que las sugerencias para El Capitán no funcionan para Sierra
KarthikS
Muchas gracias, esto también funcionó para mí. macOS High Sierra 10.13.2
pat_krat
Esto me ayudo. No hice la parte de notificar R. Aún funcionó. Muchas gracias :)
Harish
17

El siguiente comando funciona:

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

Después de eso, en RStudio, cargar rJava funciona mediante la carga del paquete "xlsx".

library("xlsx")

Entorno PS # 1: Mac OS X El Capitan 10.11.3+ con RStudio 0.99.491+ y R 3.2.3+. (Ahora he probado esto también en macOS Sierra (10.12) y R.3.3.1.)

PS # 2 Me parece que openxlsxes mucho más rápido y no depende de Java para funcionar, así que ahora estoy usando ese paquete. Espero que ayude a los demás.

Sander W. van der Laan
fuente
1
gracias mi amigo, me salvaste el día. Intenté con otras soluciones encontradas, pero esta fue la que resolvió mi problema.
Matteo De Felice
1
Otro usuario de El Cap (pero usando MacGUI) con un voto de agradecimiento. Probé esto desde el principio, ya que parece más simple (y los esfuerzos anteriores con instrucciones para instalar Java runtime 1.6 no habían resuelto el problema) y el éxito inmediato con pkg: rJava y dependencia pkg; XLConnect. Es posible que necesite instalar el Java 1.6 heredado que está disponible en Oracle y vinculado desde la página de Apple.
IRTFM
1
Hola, tu consejo también funciona con MacOS High Sierra, ¡muchas gracias!
user8193079
1
openxlsxFTW!
iled
¡Si! @iled: Estoy de acuerdo, mejor uso de openxlsxtodos modos.
Sander W. van der Laan
7

Debería poder utilizar CRAN rJava, sin necesidad de volver a compilar rJava o realizar ningún paso adicional vinculando la biblioteca compartida al directorio de la biblioteca de frameworks R.

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

Así es como lo configuré funcionando correctamente en dos Mac con Mac OS X El Capitan (10.11.6):

  1. Desinstale 'rJava' emitiendo los siguientes comandos en una ventana de terminal:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Descargue e instale el software Java de Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Agregue las siguientes líneas para /Users/<userid>/.bashrcusar su editor favorito:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Cierre y reinicie las ventanas de terminal, R y RStudio (para recoger los cambios .bashrc).

  5. Ejecute el siguiente comando en una ventana de Terminal:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Ejecute el siguiente comando en una ventana de Terminal:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
Gregory R. Warnes
fuente
Recibo un error de vinculador / biblioteca de licuuc mientras sigo esto, ¿puede explicarlo? Intentando instalar en macOS Sierra, más aquí (Anteriormente en El Capitan).
hhh
5

Aquí están los pasos fáciles para ello:

  1. eliminar el paquete rJava: remove.packages (rJava)
  2. cerca
  3. instala la última versión de Java en tu mac
  4. abra la terminal y escriba este comando: sudo R CMD javareconf
  5. Abra R e instale rJava con este comando:

    install.packages ("rJava", dependencias = VERDADERO, tipo = "fuente")

Hamidreza Ahady Dolatsara
fuente
Realmente hice esto antes de terminar aquí. Hizo que mi biblioteca dependiente de rjava se instalara pero no se iniciara. El enlace de libjvm.dylibinto /usr/local/libtambién lo hizo :)
jonalv
3

El problema de la imagen no encontrada existe con una instalación completamente nueva en OSX High Sierra con el último Java SE 10 JDK.

Pude resolver el problema de ruta con rJava usando la solución que se encuentra en la página de problemas de rJava Github: https://github.com/su/rJava/issues/78

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

Galen
fuente
1

Aquí lo que funcionó para mí en MAC:

  1. en su ~/.profileo ~/.bashrcagregue esta línea: %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. Desde la terminal ingrese este comando: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Cargue su library("rJava", "RWeka")

La mejor de las suertes.

Nasser
fuente
1

Quizás otra respuesta simple que no toque su sistema de archivos:

$ 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

(Sustituya jdk1.8.0_131.jdkcon su ruta JDK).

mokjpn
fuente
2
Tengo homebrew R, y el comando exacto que trabajó para mí es: 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. Pude ver que faltaba el camino con otool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian
@Ian quizás conozca una solución para esto aquí donde instalé Java con Homebrew y ahora estoy tratando de hacer que rJava funcione. Ideas?
hhh
1

Verifique la ubicación del archivo libjvm.dylib.

Prueba esto, en mi caso esto funcionó:

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

Revisé toda la solución de problemas que pude encontrar, luego instalé jdk-11.0.1_osx-x64_bin.dmg de: Descargas de Oracle

Todo funcionó perfectamente después de eso.

Verifique la versión de la biblioteca que no se cargó cuando ejecuta la biblioteca ('rJava') y compárela con la versión de Java que necesita instalar.

usuario2428818
fuente
1

Noté que 'rJava' es bastante estricto sobre la versión JDK mientras se carga en Rstudio.
En mi caso (Mac OS. 10.14.6 - Mojave) instalé jdk-13 que fue probado contra jdk-11.
He vinculado mi versión JDK a un directorio inexistente que Rstudio asumió como válido (JDK 11):

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

y sorprendentemente funciona como un encanto ...
Por cierto, no hubo ningún problema para ejecutar 'rJava' siguiendo las instrucciones anteriores en R. nativa.

speleo
fuente
0

Esta línea a continuación ha resuelto el mismo problema que tenía con el rJavapaquete como lo hicieron otros en esta discusión. Estoy seguro de que hay más de una solución a este problema y les agradezco sinceramente a todos por sus contribuciones porque a veces una línea como la siguiente ahorra mucho tiempo de ir a la basura.

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

Ejecute lo siguiente en la línea de comando: sudo R CMD javareconf

Varias soluciones anteriores han mencionado esto, pero también sugieren que uno elimine y luego reinstale el rJavapaquete. Encontré que esos pasos adicionales son innecesarios.

Megatron
fuente
Probé su solución, sudo R CMD javareconfpero library(rJava)todavía da los mismos errores: 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

Puede cambiar la referencia en R utilizando el siguiente 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
Si Kh
fuente