rJava load error in RStudio/R after "upgrading" to OSX Yosemite

我最近从 OSX Mountain Lion 升级到了约塞米蒂,从3.1.3升级到了3.2。升级之后,当我打开 R 或 RStudio 时,我收到一条弹出消息,说我需要安装 Java6。此外,加载 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’

However, if I invoke R from the command line and then load rJava or any package that depends on rJava, it seems to work (or at least I don't get any error messages).

我尝试了很多不同的修复方法,其中一些尝试了好几次,但是我不太记得我是按照什么顺序做的(没有意识到这会是一个如此的困境,也没有真正跟上) ,但是这里有一些要点:

  • 在我的 .bash_profile(每个 这么回答)中增加了以下内容:

    Export JAVA _ HOME = “/usr/libexec/JAVA _ home-v 1.8”
    export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/server

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

    Javareconf-n

  • 检查 options("java.home"),发现它被设置为 NULL。我尝试将它设置为以下(每 这个所以问题) :

    选项(“ Java.Home”= “/Library/Java/JavaVirtualMachines/jdk1.8.0 _ 45. jdk/Content/Home/jre”)

  • 从源代码安装了最新的 JDK 并重新安装了 rJava(不记得在哪里找到的了)。

在尝试所有这些方法的某个时候,我能够在不崩溃 R 的情况下加载 rJava,但是却得到了上面发布的错误消息。此外,当我退出 RStudio 时,它似乎正常关闭,但随后会弹出一条“ RStudio 意外退出”消息,表明程序在试图关闭时已经崩溃。

I finally decided to install Java for OS X 2014-001适用于 OS X 2014-001 (Java 6), as I seemed to be running out of options. Now, when I opened R or RStudio the "This software needs Java 6" pop-up message no longer appeared. However, I was still getting the .onLoad failed in loadNamespace() for 'rJava' error message posted above.

在回顾一些我已经看过的文章时,我注意到了以前没有看到的 另一个“如此”的回答,它建议使用以下命令行代码打开 RStudio,这些代码为 RStudio 提供了到 Java 的正确路径:

LD _ LIBRARY _ PATH = $(/usr/libexec/java _ home)/jre/lib/server: open-a RStudio

That opened an RStudio window and I was also able to load rJava and packages that depend on it without getting an error.

最后,我尝试从命令行运行 R (我以前从未这样做过)。结果表明,在命令行上,加载 rJava或任何依赖于 rJava的包都能正常工作,并且不会抛出任何错误。

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

有人知道如何诊断和解决这个问题吗?

81085 次浏览

我和你有同样的问题,经历了同样的步骤。允许通过 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

在这里你可以下载为 El Capitan 准备的 Java 版本6: < a href = “ https://Support.apple.com/kb/DL1572? viewlocale = en _ US & amp; locale = en _ US”rel = “ nofollow”> https://support.apple.com/kb/dl1572?viewlocale=en_us&locale=en_us 这样做之后,rJava 包就可以为我工作了。

可以通过运行如下命令显式加载 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")

P.S. # 1环境: Mac OS X El Capitan 10.11.3 + ,RStudio 0.99.491 + 和 R 3.2.3 + 。(我现在还在 macOSSierra (10.12)和 R. 3.3.1上测试了这一点。)

P.S. # 2我发现 openxlsx速度更快,而且不依赖 Java 工作,所以我现在使用这个包。希望能帮到别人。

下面是一些简单的步骤:

  1. 移除 rJava 包: Remove.package (rJava)
  2. 关闭 R
  3. 在你的 Mac 上安装最新的 Java
  4. 打开终端并键入以下命令: sudo R CMD javareconf
  5. 使用以下命令打开 R 并安装 rJava:

    包(“ rJava”,依赖项 = TRUE,类型 = “ source”)

以下是我在 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. Load your library("rJava", "RWeka")

祝你好运。

下面是我如何在两台运行 Mac OS X El Capitan (10.11.6)的 Mac 上正确配置它的:

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

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
    
  2. Download and install the Java software from Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Add the following lines to /Users/<userid>/.bashrc using your favorite editor:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
    
  4. Close and restart any terminal, R, and RStudio windows (to pick up the changes to .bashrc).

  5. Run the following command in a Terminal window:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
    
  6. Run the following command in a Terminal window:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
    

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

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

You should be able to use the CRAN rJava, without needing to recompile RJava or do any additional steps by linking the shared library to the R frameworks library directory.

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

下面这一行已经解决了我在 rJava软件包中遇到的问题,就像本文中讨论的其他一些问题一样。我确信这个问题有不止一个解决方案,我真诚地感谢他们所有人的贡献,因为有时候像下面这样的一行可以节省很多时间!

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

在 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

关于 JVM,您还必须通知 R:

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/

检查 libjvm.dylib 文件的位置。

试试这个,在我的情况下,这个起作用了:

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

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

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

在 OSX High Sierra 上使用最新的 JavaSE 10 JDK 进行全新安装时,没有发现映像问题。

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

RCMD javareconf JAVA _ CPPFLAGS =-I/System/Library/Framework/JavaVM.Framework/Header

我查看了所有能找到的故障排除方法,然后安装了 jdk-11.0.1 _ osx-x64 _ bin. dmg from: 甲骨文下载

之后一切都很顺利。

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

我注意到“ rJava”在 Rstudio 加载时对 JDK 版本非常严格。在我的例子中(Mac OS。10.14.6-Mojave)我已经安装了针对 jdk-11进行测试的 jdk-13。
我已经将我的 JDK 版本链接到了一个不存在的目录,RStudio (JDK 11)认为这个目录是有效的:

sudo ln -sf /Library/Java/JavaVirtualMachines/jdk-13.jdk/ /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk

令人惊讶的是,它的工作像一个魅力..。
顺便说一下,在本机 R 中按照前面的指令运行‘ rJava’是没有问题的。

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