[英]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 上正確配置它的方式:
通過在終端窗口中發出以下命令來卸載“rJava”:
Rscript -e 'remove.packages("rJava")' sudo Rscript -e 'remove.packages("rJava")'
從 Oracle 下載並安裝 Java 軟件: https : //www.java.com/en/download/mac_download.jsp
使用您喜歡的編輯器將以下幾行添加到/Users/<userid>/.bashrc
:
# Set JAVA_HOME so rJava package can find it export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
關閉並重新啟動任何終端、R 和 RStudio 窗口(以獲取對.bashrc
的更改)。
在終端窗口中運行以下命令:
sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
在終端窗口中運行以下命令:
sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
這是它的簡單步驟:
打開 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 上對我有用的內容:
在你的~/.profile
或~/.bashrc
添加這一行: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
1.1 % source .profile
(或% source .bashrc
)
% sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
remove.packages(rJava)
remove.packages(Rweka)
%sudo R CMD javareconf
install.packages("rJava", dependencies = TRUE, type = "source")
install.packages("rJava", dependencies = TRUE, type = "source")
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.