[英]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.