【发布时间】:2015-08-24 16:19:35
【问题描述】:
我最近从 OSX Mountain Lion “升级”到了 Yosemite,从 R 3.1.3 升级到了 3.2。升级后,当我立即打开 R 或 RStudio 时,我收到一条弹出消息,说我需要安装 Java 6。此外,加载 rJava 或任何依赖于 rJava 的包(例如,xlsx)导致 RStudio崩溃(当我通过直接打开R.app 尝试此操作时,R 也崩溃了)。
在尝试了在 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(根据this SO answer):导出 JAVA_HOME="/usr/libexec/java_home -v 1.8"
导出 LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/server -
从命令行重新配置java如下:
sudo R CMD javareconf -n
-
检查了
options("java.home"),发现它被设置为NULL。我尝试将其设置为以下(每个this SO question):options("java.home"="/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre")
安装了最新的 Java 开发工具包并从源代码重新安装了
rJava(不记得我在哪里找到的)。
在尝试所有这些时,我能够加载rJava 而不会导致 R 崩溃,但收到了上面发布的错误消息。另外,当我退出RStudio时,它似乎正常关闭,但随后会弹出“RStudio意外退出”消息,表明程序在尝试关闭时崩溃了。
我最终决定安装Java for OS X 2014-001 (Java 6),因为我似乎没有选择余地了。现在,当我打开 R 或 RStudio 时,“此软件需要 Java 6”弹出消息不再出现。但是,我仍然收到上面发布的.onLoad failed in loadNamespace() for 'rJava' 错误消息。
在查看我已经看过的一些帖子时,我注意到我之前错过的another SO answer,它建议使用以下命令行代码打开 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 工作。但是,我想找到一种方法来解决潜在的问题,无论它可能是什么,以便可以以通常的 Mac 方式打开 RStudio,而无需使用命令行。我还担心安装旧版本的 Java 可能会导致问题。
有人对如何诊断和解决此问题有任何想法吗?
【问题讨论】:
-
这个解决方案在 El Capitan 中仍然适用于您吗?我在使用
LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudio技巧之前得到了这个工作,但它不再工作了。我已经wrote a blog post regarding this issue 并在那里描述了这个问题。我想知道其他人是否在此配置中也遇到此问题,或者是我的错。 -
我还在使用
Yosemite,所以我不确定。有关El Capitan的答案,请参见下文。 -
好的,我想我会发布一个新问题。是的,只要
RStudio按预期加载rJava,下面的El Capitan解决方案就会很有帮助。 -
重启 RStudio 后它工作了
-
在诊断时,尝试
otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so获取共享库的列表以及如何解决它们。我不确定如何发现@rpath的运行时内容。
标签: java r rstudio rjava macos-high-sierra