簡體   English   中英

“升級”到 OSX Yosemite 后 RStudio/R 中的 rJava 加載錯誤

[英]rJava load error in RStudio/R after "upgrading" to OSX Yosemite

我最近從 OSX Mountain Lion “升級”到 Yosemite,從 R 3.1.3 升級到 3.2。 升級后,當我打開 R 或 RStudio 時,我立即收到一條彈出消息,提示我需要安裝 Java 6。此外,加載rJava或任何依賴於 rJava 的包(例如, xlsx )導致 RStudio 崩潰(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 答案):

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

  • 從命令行重新配置java如下:

    須藤 R CMD javareconf -n

  • 檢查options("java.home")並發現它被設置為NULL 我嘗試將其設置為以下內容(根據此 SO 問題):

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

  • 安裝了最新的 Java 開發工具包並從源代碼重新安裝了rJava (不記得我在哪里找到的那​​個)。

在嘗試所有這些時,我能夠在不使 R 崩潰的情況下加載rJava ,但收到了上面發布的錯誤消息。 另外,當我退出RStudio時,它似乎正常關閉,但隨后會彈出“RStudio意外退出”消息,表明程序在嘗試關閉時崩潰了。

我最終決定為 OS X 2014-001 (Java 6) 安裝Java ,因為我似乎沒有什么選擇了。 現在,當我打開 R 或 RStudio 時,“此軟件需要 Java 6”彈出消息不再出現。 但是, .onLoad failed in loadNamespace() for 'rJava'上面發布的.onLoad failed in loadNamespace() for 'rJava'錯誤消息,我仍然.onLoad failed in loadNamespace() for 'rJava'收到.onLoad failed in loadNamespace() for 'rJava'

在查看我已經看過的一些帖子時,我注意到另一個我之前錯過的SO 答案,它建議使用以下命令行代碼打開 RStudio,為 RStudio 提供正確的 java 路徑:

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

這打開了一個 RStudio 窗口,我還能夠加載rJava和依賴它的包而不會出錯。

最后,我嘗試從命令行運行 R(我以前沒有這樣做過)。 事實證明,在命令行上,加載rJava或任何依賴於rJava包都可以工作並且不會拋出任何錯誤。

因此,如果我從命令行使用為 RStudio 提供 java 路徑的代碼打開 RStudio,我現在可以讓rJava工作(如上所述)。 但是,我想找到一種方法來解決潛在的問題,無論它是什么,以便 RStudio 可以以通常的 Mac 方式打開,而無需命令行工具。 我還擔心安裝舊版本的 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 路徑(注意與早期 Java 版本的說明相比,路徑中缺少的jre文件夾):

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

您還必須通知 R 有關 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/

以下命令有效:

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

之后,在 RStudio 中,通過加載“xlsx”包來加載 rJava。

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 上對此進行了測試。)

PS #2 我發現openxlsx快得多並且不依賴於 Java 來工作,所以我現在正在使用那個包。 希望能幫助別人。

您應該能夠使用 CRAN 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")'

這是它的簡單步驟:

  1. 刪除 rJava 包:remove.packages(rJava)
  2. 關閉 R
  3. 在 Mac 上安裝最新的 Java
  4. 打開終端並輸入以下命令:sudo R CMD javareconf
  5. 打開 R 並使用以下命令安裝 rJava:

    install.packages("rJava", dependencies=TRUE, type="source")

使用最新的 Java SE 10 JDK 在 OSX High Sierra 上進行全新安裝時存在未找到圖像的問題。

我能夠使用在 rJava Github 問題頁面上找到的修復程序解決 rJava 的路徑問題: https : //github.com/su/rJava/issues/78

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

這是在 MAC 上對我有用的內容:

  1. 在你的~/.profile~/.bashrc添加這一行: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile (或% 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. 從終端輸入以下命令: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. 加載您的library("rJava", "RWeka")

祝你好運。

也許是另一個不涉及您的文件系統的簡單答案:

$ 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

(用您的 JDK 路徑替換jdk1.8.0_131.jdk 。)

檢查 libjvm.dylib 文件的位置。

試試這個,在我的情況下這有效:

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

我完成了我能找到的所有故障排除,然后從以下位置安裝了 jdk-11.0.1_osx-x64_bin.dmg: Oracle 下載

之后一切都運行得很完美。

檢查運行 library('rJava') 時未加載的庫版本,並將其與您需要安裝的 Java 版本匹配。

我注意到在 Rstudio 中加載時,“rJava”對 JDK 版本非常嚴格。
在我的情況下(Mac OS。10.14.6 - Mojave)我安裝了 jdk-13,它針對 jdk-11 進行了測試。
我已將我的 JDK 版本鏈接到一個不存在的目錄,該目錄被 Rstudio(JDK 11)認為是有效的:

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

令人驚訝的是它就像一個魅力......
順便說一句,按照本機 R 中的先前說明運行“rJava”沒有問題。

您可以在這里下載 El Capitan 的舊版 Java 版本 6: https : //support.apple.com/kb/DL1572? viewlocale=en_US&locale=en_US 這樣做后,rJava 包對我有用。

下面的這一行解決了我在使用rJava包時遇到的與本討論中的其他一些問題相同的問題。 我相信這個問題有不止一種解決方案,我真誠地感謝他們所有人的貢獻,因為有時像下面這樣的一行可以節省很多時間,以免浪費時間!

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

在命令行上運行以下命令: sudo R CMD javareconf

上面的幾個解決方案都提到了這一點,但他們也建議刪除並隨后重新安裝rJava包。 我發現這些額外的步驟是不必要的。

您可以使用以下命令更改 R 中的引用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM