Erro de carregamento do rJava no RStudio / R após "atualizar" para o OSX Yosemite

122

Recentemente, "atualizei" o OSX Mountain Lion para Yosemite e o R 3.1.3 para o 3.2. Imediatamente após a atualização, quando abri o R ou o RStudio, recebi uma mensagem pop-up informando que precisava instalar o Java 6. Além disso, o carregamento rJavaou qualquer pacote que depende do rJava (por exemplo, xlsx) causou uma falha no RStudio (o R também travou quando tentei isso abrindo R.appdiretamente).

Depois de tentar algumas correções encontradas no Stack Overflow e em outros lugares (mais detalhes abaixo), estou em um ponto em que o carregamento rJavaou qualquer pacote que depende rJavanão causa mais a falha do R, mas resulta no seguinte erro:

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

No entanto, se eu chamar R na linha de comando e carregar rJavaou qualquer pacote que dependa rJava, ele parece funcionar (ou pelo menos não recebo nenhuma mensagem de erro).

Eu tentei várias tentativas diferentes de correção, algumas delas algumas vezes, e não consigo me lembrar exatamente o que fiz em que ordem (não percebi que isso seria um pântano e não estava realmente acompanhando) , mas aqui está a essência:

  • Adicionado o seguinte ao meu .bash_profile(por esta resposta do SO ):

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

  • Java reconfigurado a partir da linha de comando da seguinte maneira:

    sudo R CMD javareconf -n

  • Verificado options("java.home")e descoberto, isso foi definido como NULL. Tentei defini-lo da seguinte forma (por esta pergunta SO ):

    opções ("java.home" = "/ Biblioteca / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Conteúdo / Home / jre")

  • Instalei o Java Development Kit mais recente e reinstalei rJavada fonte (não lembro onde encontrei esse).

Em algum momento ao tentar tudo isso, eu consegui carregar rJavasem travar o R, mas recebi a mensagem de erro postada acima. Além disso, quando eu saía do RStudio, ele parecia fechar normalmente, mas uma mensagem "RStudio fecha inesperadamente" seria exibida, indicando que o programa travou ao tentar fechar.

Finalmente, decidi instalar o Java para OS X 2014-001 (Java 6), pois parecia estar ficando sem opções. Agora, quando abri o R ou o RStudio, a mensagem pop-up "Este software precisa do Java 6" não apareceu mais. No entanto, eu ainda estava recebendo a .onLoad failed in loadNamespace() for 'rJava'mensagem de erro postada acima.

Ao revisar algumas das postagens que eu já havia examinado, notei outra resposta do SO que eu havia perdido antes, que recomendava abrir o RStudio com o seguinte código de linha de comando que fornece ao RStudio o caminho correto para java:

LD_LIBRARY_PATH = $ (/ usr / libexec / java_home) / jre / lib / servidor: aberto -a RStudio

Isso abriu uma janela do RStudio e eu também pude carregar rJavae pacotes que dependem dela sem obter nenhum erro.

Por fim, tentei executar o R ​​na linha de comando (o que não havia feito antes). Acontece que, na linha de comando, no carregamento rJavaou em qualquer pacote que dependa de rJavaobras e não gera erros.

Portanto, agora posso começar rJavaa trabalhar se abrir o RStudio na linha de comando com o código que fornece ao RStudio o caminho java (como observado acima). No entanto, eu gostaria de encontrar uma maneira de corrigir o problema subjacente, qualquer que seja, para que o RStudio possa ser aberto da maneira usual do Mac, sem a necessidade de um kludge na linha de comando. Também estou preocupado que a instalação de uma versão antiga do Java possa causar problemas no futuro.

Alguém tem alguma idéia sobre como diagnosticar e resolver esse problema?

eipi10
fonte
Esta solução ainda funciona para você em El Capitan? Eu trabalhei antes de usar o LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudiotruque, mas ele não funciona mais. Eu escrevi uma postagem no blog sobre esse problema e descrevi esse problema lá. Gostaria de saber se outras pessoas também enfrentam esse problema nessa configuração ou se a culpa é minha.
Paul Klemm
Ainda estou usando Yosemite, então não tenho certeza. Veja abaixo uma resposta relacionada a El Capitan.
precisa saber é o seguinte
Ok, acho que vou postar uma nova pergunta então. Sim, a El Capitansolução abaixo é útil assim que a RStudiocarga rJavaé esperada.
Paul Klemm
2
Funcionou depois que eu reiniciei o RStudio
Pranay Aryal
Ao diagnosticar, tente otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so obter uma lista das bibliotecas compartilhadas e como elas são resolvidas. Não sei como descobrir o conteúdo do tempo de execução @rpath.
Dave X

Respostas:

279

Eu tive o mesmo problema e segui as mesmas etapas que você. A etapa final para permitir a inicialização do RStudio por meio do Finder / Spotlight foi vincular libjvm.dylib a / usr / local / lib:

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

-f o sinalizador é adicionado para forçar a substituição do arquivo / link existente

Alex Popov
fonte
4
Trabalhou para corrigir o mesmo problema quando a atualização do El Capitan para o Sierra é concluída. +1
Murta
2
Isso resolveu muitos problemas; especialmente se erro original vem do cannot jfindclass[[1]]que pode vir de rJava e um driver JDBC
Jenks
1
Eu tenho que executar este comando toda vez que atualizo o Java no meu Macbook Pro. Ele ainda funciona no MacOS Sierra 10.12.5 e Java Versão 8 Atualização 141.
thiagoveloso
11
Isso quase funcionou para mim. Além disso, tive que adicionar um link simbólico na estrutura R ao /usr/local/lib/libjvm.dylibarquivo, pois / usr / local / lib / não parece estar no @rpath. Por exemplo:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X
1
Isso pode ser útil github.com/snowflakedb/dplyr-snowflakedb/wiki/…
user2079550
53

No OSX El Capitan 10.11, o usuário não tem permissão para gravar em / usr / lib. Então, em vez disso, use o seguinte comando:

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

Você pode carregar o libjvm.dylib explicitamente, executando como

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
yuan
fonte
Possível, com certeza, mas não é conveniente. A resposta aceita é provavelmente uma opção melhor. +1por oferecer uma alternativa.
Thiagoveloso
27

No macOS High Sierra (10.13.1) e no Java Versão 9, é necessário usar um caminho da JVM ligeiramente diferente (observe a jrepasta ausente no caminho em comparação com as instruções para versões anteriores do Java):

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

Você também deve notificar R sobre a 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
fonte
Impressionante. Isso funcionou! Parece que sugestões para El Capitan não trabalham para Sierra
KarthikS
Muito obrigado, isso funcionou para mim também. macOS High Sierra 10.13.2
pat_krat 18/03/19
Isso me ajudou. Eu não fiz a parte R de notificação. Ainda funcionou. Muito obrigado :)
Harish
17

O comando a seguir funciona:

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

Depois disso, no RStudio, o carregamento do rJava funciona através do carregamento do pacote "xlsx".

library("xlsx")

Ambiente PS # 1: Mac OS X El Capitan 10.11.3+ com RStudio 0.99.491+ e R 3.2.3+. (Agora também testei isso no macOS Sierra (10.12) e R.3.3.1.)

PS # 2 Acho que openxlsxé muito mais rápido e não depende do Java para funcionar, então agora estou usando esse pacote. Espero que ajude os outros.

Sander W. van der Laan
fonte
1
obrigado meu amigo, você salvou meu dia. Tentei com outras soluções encontradas, mas essa foi a que resolveu meu problema.
Matteo De Felice
1
Outro usuário do El Cap (mas usando a MacGUI) com um voto de agradecimento. Tentei isso desde o início, pois parece mais simples (e os esforços anteriores com instruções para instalar o Java runtime 1.6 não resolveram o problema) e o sucesso imediato com o pkg: rJava e a dependência do pkg; XLConnect. Pode ser necessário instalar o Java 1.6 herdado, disponível na Oracle e vinculado na página da Apple.
IRTFM 16/06
1
Olá, o seu conselho também funciona com o MacOS High Sierra, muito obrigado!
precisa saber é o seguinte
1
openxlsxFTW!
3021818
Sim! @iled: Eu concordo, é melhor usar de openxlsxqualquer maneira.
Sander W. van der Laan
7

Você deve poder usar o CRAN rJava, sem precisar recompilar o rJava ou executar outras etapas vinculando a biblioteca compartilhada ao diretório da biblioteca de estruturas R.

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

Foi assim que eu o configurei funcionando corretamente em dois Macs executando o Mac OS X El Capitan (10.11.6):

  1. Desinstale o 'rJava' emitindo os seguintes comandos em uma janela do terminal:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Faça o download e instale o software Java da Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Adicione as seguintes linhas ao /Users/<userid>/.bashrcuso do seu editor favorito:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Feche e reinicie qualquer janela do terminal, R e RStudio (para pegar as alterações em .bashrc).

  5. Execute o seguinte comando em uma janela do Terminal:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Execute o seguinte comando em uma janela do Terminal:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
Gregory R. Warnes
fonte
Estou recebendo um erro de biblioteca / vinculador do licuuc ao seguir isso, você consegue explicar? Tentando instalar no macOS Sierra, mais aqui (anteriormente em El Capitan).
Hhh
5

Aqui estão as etapas fáceis para isso:

  1. remova o pacote rJava: remove.packages (rJava)
  2. mais perto
  3. instale o Java mais recente no seu mac
  4. abra o terminal e digite este comando: sudo R CMD javareconf
  5. Abra R e instale o rJava com este comando:

    install.packages ("rJava", dependências = TRUE, tipo = "source")

Hamidreza Ahady Dolatsara
fonte
Na verdade, eu fiz isso antes de terminar aqui. Ele fez com que minha biblioteca dependente de rjava fosse instalada, mas não iniciada. A ligação de libjvm.dylibdentro /usr/local/libtornou também começar :)
jonalv
3

O problema da imagem não encontrada existe com uma instalação totalmente nova no OSX High Sierra com o Java SE 10 JDK mais recente.

Consegui resolver o problema do caminho com o rJava usando a correção encontrada na página de problemas do rJava Github: https://github.com/su/rJava/issues/78

R CMD javareconf JAVA_CPPFLAGS = -I / Sistema / Biblioteca / Frameworks / JavaVM.framework / Headers

Galen
fonte
1

Aqui o que funcionou para mim no MAC:

  1. no seu ~/.profileou ~/.bashrcadicione esta linha: %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. No terminal, digite este comando: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Carregue seu library("rJava", "RWeka")

Boa sorte.

Nasser
fonte
1

Talvez outra resposta simples que não toque no seu sistema de arquivos:

$ 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

(Substitua jdk1.8.0_131.jdkpelo seu caminho JDK.)

mokjpn
fonte
2
Eu tenho homebrew R, e o comando exato que funcionou para mim é: 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. Eu era capaz de ver que o rpath estava faltando comotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian
@Ian, talvez você conheça uma solução para isso aqui, onde instalei o Java com o Homebrew e agora estou tentando obter o rJava funcionando. Ideias?
Hhh
1

Verifique a localização do arquivo libjvm.dylib.

Tente isso, no meu caso, isso funcionou:

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

Examinei toda a solução de problemas que pude encontrar e instalei o jdk-11.0.1_osx-x64_bin.dmg em: Oracle downloads

Tudo funcionou perfeitamente depois disso.

Verifique a versão da biblioteca que não foi carregada ao executar a biblioteca ('rJava') e faça a correspondência com a versão java que você precisa instalar.

user2428818
fonte
1

Notei que 'rJava' é bastante rigoroso quanto à versão do JDK durante o carregamento no Rstudio.
No meu caso (Mac OS. 10.14.6 - Mojave), instalei o jdk-13, que foi testado contra o jdk-11.
Vinculei minha versão do JDK a um diretório inexistente que foi considerado válido pelo Rstudio (JDK 11):

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

e surpreendentemente ele funciona como um encanto ...
BTW., não havia nenhum problema para executar 'rJava' seguindo as instruções anteriores no R. nativo

speleo
fonte
0

Esta linha abaixo resolveu o mesmo problema que eu estava tendo com o rJavapacote, como alguns outros nesta discussão. Tenho certeza de que há mais de uma solução para este problema e agradeço sinceramente a todos por suas contribuições, porque às vezes uma linha como a abaixo economiza muito tempo indo para o lixo!

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

Execute o seguinte na linha de comandos: sudo R CMD javareconf

Várias soluções acima mencionaram isso, mas também sugerem que uma remova e reinstale o rJavapacote. Eu achei essas etapas adicionais desnecessárias.

Megatron
fonte
Eu tentei sua solução, sudo R CMD javareconfmas library(rJava)ainda dá os mesmos erros: 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

Você pode alterar a referência em R usando o seguinte 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
fonte