在升级到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上正常工作的方式:

  1. 通过在终端窗口中发出以下命令来卸载“rJava”:

     Rscript -e 'remove.packages("rJava")' sudo Rscript -e 'remove.packages("rJava")' 
  2. 从Oracle下载并安装Java软件: https : //www.java.com/en/download/mac_download.jsp

  3. 使用您最喜爱的编辑器/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 
  4. 关闭并重新启动任何终端,R和RStudio窗口(以获取对.bashrc的更改)。

  5. 在终端窗口中运行以下命令:

     sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib 
  6. 在终端窗口中运行以下命令:

     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上为我工作的是:

  1. 在你的~/.profile~/.bashrc加入这一行: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile (或% source .bashrc

  2. % sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  3. remove.packages(rJava)
  4. remove.packages(Rweka)
  5. 从终端输入这个命令: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. 加载你的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软件包就可以为我工作。

这是简单的步骤:

  1. 删除rJava包:remove.packages(rJava)
  2. 关闭R
  3. 在你的mac上安装最新的Java
  4. 打开终端并键入以下命令:sudo R CMD javareconf
  5. 打开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