“升级”到OSX Yosemite后,RStudio / R中的rJava加载错误

时间:2015-06-09 17:33:28

标签: java r rstudio rjava macos-high-sierra

我最近从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”
      export LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / server

  • 从命令行重新配置java,如下所示:

      

    sudo R CMD javareconf -n

  • 选中options("java.home")并发现此设置为NULL。我尝试将其设置为以下(this SO question}):

      

    选项( “java.home”= “/库/爪哇/ JavaVirtualMachines / jdk1.8.0_45.jdk /内容/主页/ 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路径:< / p>

  

LD_LIBRARY_PATH = $(/ usr / libexec / java_home)/ jre / lib / server:open -a RStudio

这打开了一个RStudio窗口,我还能够加载rJava和依赖它的包而不会出错。

最后,我尝试从命令行运行R(我之前没有做过)。事实证明,在命令行中,加载rJava或任何依赖于rJava的包都可以正常工作,并且不会抛出任何错误。

所以,如果我从命令行打开RStudio并使用为RStudio提供java路径的代码(如上所述),我现在可以使rJava工作。但是,我想找到一种方法来解决潜在的问题,无论它是什么,这样就可以用通常的Mac方式打开RStudio,而不需要命令行kludge。我还担心安装旧版本的Java可能会导致问题。

有没有人对如何诊断和解决这个问题有任何想法?

18 个答案:

答案 0 :(得分:273)

我遇到了同样的问题并且和你一样经历了同样的步骤。允许通过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标志以强制覆盖现有文件/链接

答案 1 :(得分:52)

在OSX El Capitan 10.11上,用户无权写入/ usr / lib。因此,请使用以下命令:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

答案 2 :(得分:28)

您可以通过像

一样运行来明确加载libjvm.dylib
dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)

答案 3 :(得分:25)

在macOS High Sierra(10.13.1)和Java Version 9上,您必须使用稍微不同的JVM路径(注意路径中缺少的jre文件夹与早期Java版本的说明相比):

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/

答案 4 :(得分:17)

以下命令有效:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

之后,在RStudio中,加载rJava可以通过加载&#34; xlsx&#34;封装

library("xlsx")

P.S。 #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上对此进行了测试。)

P.S。 #2我发现openxlsx要快得多,并且不依赖Java来工作,所以我现在正在使用该软件包。希望能帮助他人。

答案 5 :(得分:6)

这就是我在运行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

    # 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")'
    

答案 6 :(得分:5)

您应该能够使用CRAN rJava,而无需重新编译 rJava 或通过将共享库链接到R框架库目录来执行任何其他步骤。

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries

答案 7 :(得分:3)

以下是简单的步骤:

  1. 删除rJava包:remove.packages(rJava)
  2. close R
  3. 在Mac上安装最新的Java
  4. 打开终端并输入以下命令:sudo R CMD javareconf
  5. 打开R并使用以下命令安装rJava:

    install.packages(“rJava”,dependencies = TRUE,type =“source”)

答案 8 :(得分:3)

使用最新的Java SE 10 JDK在OSX High Sierra上进行全新安装时,找不到图像问题。

我能够使用rJava Github问题页面上的修复解决rJava的路径问题:https://github.com/s-u/rJava/issues/78

R CMD javareconf JAVA_CPPFLAGS = -I / System / Library / Frameworks / JavaVM.framework / Headers

答案 9 :(得分:1)

这对我来说对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")
  9. 祝你好运。

答案 10 :(得分:1)

也许另一个简单的答案不会触及您的文件系统:

$ 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。)

答案 11 :(得分:1)

检查libjvm.dylib文件的位置。

试试这个,在我看来这很有效:

dyn.load('/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib')
library(rJava)

答案 12 :(得分:1)

我经历了所有可能的故障排除过程,然后从Oracle downloads安装了jdk-11.0.1_osx-x64_bin.dmg

此后一切都很好。

检查运行库('rJava')时未加载的库版本,并将其与您需要安装的Java版本进行匹配。

答案 13 :(得分:0)

下面的这一行解决了我在rJava包中遇到的问题,正如本次讨论中的其他人所做的那样。我确信这个问题不止一个解决方案,我真诚地感谢他们所有人的贡献,因为有时像下面这样的一行可以节省大量的时间去垃圾!

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

答案 14 :(得分:0)

您可以在此下载El Capitan的旧版Java 6:https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US 这样做之后,rJava包对我有用。

答案 15 :(得分:0)

在命令行上运行以下命令:sudo R CMD javareconf

上面的几个解决方案已经提到了这一点,但他们还建议删除并随后重新安装rJava包。我发现这些额外的步骤是不必要的。

答案 16 :(得分:0)

我注意到,在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”没有问题。

答案 17 :(得分:0)

您可以使用以下命令在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