问题
我最近从OSX Mountain Lion"升级"到Yosemite,从R 3.1.3升级到3.2。在升级之后,当我打开R或RStudio时,我收到一条弹出消息,说我需要安装Java 6.此外,loadingrJava
或依赖于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然后loadrJava
或依赖于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
- 选中的选项("java.home")并发现它被设置为NULL。我尝试将其设置为以下(根据此SO问题):options("java.home"="/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre")
- 安装了最新的Java开发工具包并从源代码重新安装了rJava(不记得我在哪里找到了它)。
在尝试所有这些的某些时候,我能够加载rJava
而不会崩溃R,而是得到上面发布的错误消息。此外,当我退出RStudio时,它似乎正常关闭,但随后会弹出"RStudio意外退出"消息,表明程序在尝试关闭时崩溃了。
我最终决定安装484101012(Java 6),因为我似乎没有选择。现在,当我打开R或RStudio时,"此软件需要Java 6"弹出消息不再出现。但是,我仍然收到上面发布的.onLoad failed in loadNamespace() for 'rJava'
错误消息。
在回顾我已经看过的一些帖子时,我注意到之前我错过了4345453941,它建议使用以下命令行代码打开RStudio,它为RStudio提供了正确的java路径:
LD_LIBRARY_PATH = $(/ usr / libexec / java_home)/ jre / lib / server:open -a RStudio
这打开了一个RStudio窗口,我也能够加载rJava
和依赖它的包而不会出错。
最后,我尝试从命令行运行R(我之前没有做过)。事实证明,在命令行上,loadingrJava
或任何依赖于rJava
works的包并且不会抛出任何错误。
所以,如果我从命令行打开RStudio并使用为RStudio提供java路径的代码(如上所述),我现在可以使用rJava
。但是,我想找到一种方法来解决潜在的问题,无论它是什么,这样就可以用通常的Mac方式打开RStudio,而不需要命令行kludge。我还担心安装旧版本的Java可能会导致问题。
有没有人对如何诊断和解决这个问题有任何想法?
#1 热门回答(257 赞)
我遇到了同样的问题,并且和你一样经历了同样的步骤。允许通过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
flag以强制覆盖现有文件/链接
#2 热门回答(48 赞)
在OSX El Capitan 10.11上,用户无权写入/ usr / lib。因此,请使用以下命令:
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
#3 热门回答(27 赞)
你可以通过运行方式明确加载libjvm.dylib
dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)