[java] OSX Yosemite로 “업그레이드”한 후 RStudio / R의 rJava로드 오류

저는 최근에 OSX Mountain Lion에서 Yosemite로, R 3.1.3에서 3.2로 “업그레이드”했습니다. 업그레이드 직후 R 또는 RStudio를 열었을 때 Java 6을 설치해야한다는 팝업 메시지가 표시되었습니다. 또한 rJavarJava (예 :)에 의존하는 패키지를 로드 하거나 로드 하면 xlsxRStudio가 충돌 (R도 충돌 함) R.app직접 열어서 시도했을 때 ).

Stack Overflow 및 다른 곳에서 발견 된 몇 가지 수정 사항을 시도한 후 (자세한 내용은 아래 참조),로드 rJava또는 종속 된 패키지가 rJava더 이상 R을 충돌시키지 않지만 다음 오류가 발생 하는 시점에 있습니다 .

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

그러나 명령 줄에서 R을 호출 한 다음로드 rJava또는rJava 하면 작동하는 것 같습니다 (또는 적어도 오류 메시지가 표시되지 않음).

여러 가지 시도한 수정 사항을 시도해 보았습니다. 그 중 일부는 몇 번이고 제가 어떤 순서로 무엇을했는지 정확히 기억할 수 없습니다 (이것이 그런 끔찍한 일이 될 것이라는 것을 깨닫지 못했으며 실제로 추적하지 못했습니다) ,하지만 그 요점은 다음과 같습니다.

  • .bash_profile( 이 SO 답변에 따라 ) 다음을 추가했습니다 .

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

  • 다음과 같이 명령 줄에서 java를 재구성했습니다.

    sudo R CMD javareconf -n

  • options("java.home")이것이로 설정되어 있는지 확인 하고 발견했습니다 NULL. 나는 그것을 다음과 같이 설정하려고 시도했다 ( 이 질문에 따라 ).

    options ( “java.home”= “/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre”)

  • 최신 Java Development Kit를 설치 rJava하고 소스에서 다시 설치 했습니다 (어디에서 찾았는지 기억할 수 없음).

이 모든 것을 시도하는 동안 어떤 시점에서 rJavaR을 충돌시키지 않고 로드 할 수 있었지만 대신 위에 게시 된 오류 메시지를 받았습니다. 또한 RStudio를 종료하면 정상적으로 종료 된 것처럼 보이지만 “RStudio가 예기치 않게 종료되었습니다”라는 메시지가 나타나 프로그램을 종료하는 동안 충돌이 발생했음을 나타냅니다.

옵션이 부족한 것 같아 마침내 OS X 2014-001 (Java 6) 용 Java 를 설치하기로 결정했습니다 . 이제 R 또는 RStudio를 열었을 때 “이 소프트웨어에는 Java 6이 필요합니다.”라는 팝업 메시지가 더 이상 나타나지 않습니다. 그러나 나는 여전히.onLoad failed in loadNamespace() for 'rJava' 위에 게시 된 오류 메시지가 나타납니다.

이미 살펴본 게시물 중 일부를 검토하면서 이전에 놓친 또 다른 SO 답변 을 발견했습니다. RStudio에 올바른 Java 경로를 제공하는 다음 명령 줄 코드로 RStudio를 열 것을 권장했습니다.

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

그러면 RStudio 창이 열리고 rJava오류없이 여기에 의존 하는로드 및 패키징 도 가능했습니다 .

마지막으로 명령 줄에서 R을 실행 해 보았습니다 (이전에 해본 적이 없음). 명령 줄,로드 rJava또는 종속 된 패키지에서rJava 작업에 오류를 발생시키지 않는 .

그래서 이제 얻을 수 있습니다 rJava 명령 줄에서 RStudio에 자바 경로를 제공하는 코드를 사용하여 RStudio를 열면 작업을 (위에서 언급 한대로). 그러나 명령 줄 kludge 없이도 일반적인 Mac 방식으로 RStudio를 열 수 있도록 근본적인 문제를 해결하는 방법을 찾고 싶습니다. 또한 이전 버전의 Java가 설치되어 있으면 문제가 발생할 수 있다는 점도 우려됩니다.

누구든지이 문제를 진단하고 해결하는 방법에 대한 아이디어가 있습니까?



답변

나는 같은 문제가 있었고 당신과 같은 단계를 거쳤습니다. Finder / Spotlight를 통해 RStudio를 시작하는 마지막 단계는 libjvm.dylib를 / usr / local / lib에 연결하는 것입니다.

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

-f 기존 파일 / 링크를 강제로 덮어 쓰기 위해 플래그가 추가됨


답변

OSX El Capitan 10.11에서 사용자는 / usr / lib에 쓸 권한이 없습니다. 따라서 대신 다음 명령을 사용하십시오.

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


답변

다음과 같이 실행하여 libjvm.dylib를 명시 적으로로드 할 수 있습니다.

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


답변

macOS High Sierra (10.13.1) 및 Java 버전 9에서는 약간 다른 JVM 경로를 사용해야합니다 ( jre이전 Java 버전의 지침과 비교하여 경로에서 누락 된 폴더에 유의).

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

또한 JVM에 대해 R에게 알려야합니다.

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/


답변

다음 명령이 작동합니다.

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

그 후 RStudio에서 rJava로드는 “xlsx”패키지로드를 통해 작동합니다.

library("xlsx")

PS # 1 환경 : Mac OS X El Capitan 10.11.3+ 및 RStudio 0.99.491+ 및 R 3.2.3+. (이제 macOS Sierra (10.12) 및 R.3.3.1에서도 테스트했습니다.)

추신 # 2 나는 그것이 openxlsx훨씬 더 빠르며 작동하기 위해 Java에 의존하지 않는다는 것을 알았습니다. 그래서 지금은 그 패키지를 사용하고 있습니다. 다른 사람들에게 도움이되기를 바랍니다.


답변

당신은 다시 컴파일 할 필요없이 크랑 rJava을 사용할 수 있어야 rJava을 하거나 R 프레임 워크 라이브러리 디렉토리에 공유 라이브러리를 연결하여 추가 단계를 수행하십시오.

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


답변

다음은 Mac OS X El Capitan (10.11.6)을 실행하는 두 대의 Mac에서 제대로 작동하도록 구성한 방법입니다.

  1. 터미널 창에서 다음 명령을 실행하여 ‘rJava’를 제거하십시오.

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Oracle에서 Java 소프트웨어를 다운로드하고 설치합니다. https://www.java.com/en/download/mac_download.jsp

  3. /Users/<userid>/.bashrc선호하는 편집기 를 사용 하려면 다음 행을 추가하십시오 .

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. 터미널, R 및 RStudio 창을 닫고 다시 시작합니다 (에 대한 변경 사항 적용 .bashrc).

  5. 터미널 창에서 다음 명령을 실행하십시오.

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. 터미널 창에서 다음 명령을 실행하십시오.

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