在升级到OSX Yosemite后,RStudio / R中的rJava加载错误
我最近从OSX Mountain Lion升级到优胜美地,从3.1.3升级到3.2。 升级完成后立即打开R或RStudio,弹出消息说我需要安装Java 6.另外,加载rJava
或任何依赖rJava的软件包(例如xlsx
)会导致RStudio崩溃(R当我尝试通过直接打开R.app
时也崩溃了)。
在堆栈溢出和其他地方(更多细节见下文)发现一些修复后,我在加载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回答 ):export 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
。 我试着把它设置为以下(根据这个问题 ):选项( “java.home”= “/库/的Java / JavaVirtualMachines / jdk1.8.0_45.jdk /内容/首页/ JRE”)
-
安装了最新的Java开发工具包,并从源代码重新安装
rJava
(不记得我在哪里找到一个)。
在尝试所有这些的时候,我可以在不加载R的情况下加载rJava
,但却得到了上面的错误消息。 另外,当我退出RStudio时,它似乎正常关闭,但是会弹出一个“RStudio意外退出”消息,表示程序在尝试关闭时崩溃。
我终于决定安装Java for OS X 2014-001 (Java 6),因为我似乎没有多少选择。 现在,当我打开R或RStudio时,“此软件需要Java 6”弹出消息不再出现。 但是,我仍然得到了.onLoad failed in loadNamespace() for 'rJava'
错误消息。
在回顾一些我已经看过的帖子的时候,我注意到了另外一个我以前错过的回答 ,它推荐使用下面的命令行代码打开RStudio,它给了RStudio java的正确路径:
LD_LIBRARY_PATH = $(/ usr / libexec / java_home)/ jre / lib / server:open -a RStudio
这打开了一个RStudio窗口,我也能够加载rJava
和依赖它的包而不会出现错误。
最后,我尝试从命令行运行R(以前我没有做过)。 事实证明,在命令行上,加载rJava
或任何依赖rJava
包工作,并不会产生任何错误。
所以,现在我可以让rJava
工作,如果我从RStudio的Java路径(如上所述)的代码从命令行打开RStudio。 但是,我想找到一种方法来解决潜在的问题,无论它是什么,以便RStudio可以用通常的Mac方式打开,而不需要命令行kludge。 我还担心,安装旧版本的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)
以下命令的作品:
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的工作,所以我现在正在使用该软件包。 希望能帮助别人。
这就是我配置它在运行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
添加到/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")'
您应该能够使用CRAN rJava,而不需要重新编译rJava,或者通过将共享库链接到R框架库目录来执行任何其他步骤。
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
这里在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
。)
在这里,您可以下载El Capitan的传统Java版本6: https : //support.apple.com/kb/DL1572? viewlocale =zh_CN& locale =zh_CN这样做之后,rJava软件包就可以为我工作。
这是简单的步骤:
- 删除rJava包:remove.packages(rJava)
- 关闭R
- 在你的mac上安装最新的Java
- 打开终端并键入以下命令:sudo R CMD javareconf
-
打开R并使用以下命令安装rJava:
install.packages(“rJava”,dependencies = TRUE,type =“source”)
下面的这一行已经解决了我在rJava
软件包中遇到的同样的问题。 我敢肯定,这个问题有不止一个解决方案,我真诚地感谢他们所做的贡献,因为有时候像下面这样的一行会节省很多时间去做垃圾!
sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib