124

我最近从 OSX Mountain Lion 升级到了 Yosemite,从 R 3.1.3 升级到了 3.2。升级后,当我立即打开 R 或 RStudio 时,我收到一条弹出消息,说我需要安装 Java 6。此外,加载rJava或任何依赖于 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 然后加载rJava或任何依赖于 的包rJava,它似乎可以工作(或者至少我没有收到任何错误消息)。

我已经尝试了许多不同的尝试修复,其中一些尝试了几次,并且不太记得我按照什么顺序做了什么(没有意识到这会是一个泥潭,并且没有真正跟踪) ,但这是它的要点:

  • 将以下内容添加到我的.bash_profile(根据此 SO 答案):

    导出 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。我尝试将其设置为以下(根据这个 SO question):

    options("java.home"="/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre")

  • 安装了最新的 Java 开发工具包并rJava从源代码重新安装(不记得我在哪里找到的)。

在尝试所有这些时,我能够在rJava不崩溃 R 的情况下加载,但收到上面发布的错误消息。另外,当我退出RStudio时,它似乎可以正常关闭,但随后会弹出“RStudio意外退出”消息,表明程序在尝试关闭时崩溃了。

我最终决定为 OS X 2014-001 (Java 6) 安装 Java,因为我似乎没有选择余地了。现在,当我打开 R 或 RStudio 时,“此软件需要 Java 6”弹出消息不再出现。但是,我仍然收到.onLoad failed in loadNamespace() for 'rJava'上面发布的错误消息。

在查看我已经看过的一些帖子时,我注意到另一个我之前错过的SO 答案,它建议使用以下命令行代码打开 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(如上所述),我现在可以开始工作了。但是,我想找到一种方法来解决潜在的问题,无论它可能是什么,以便可以以通常的 Mac 方式打开 RStudio,而无需使用命令行。我还担心安装旧版本的 Java 可能会导致问题。

有人对如何诊断和解决此问题有任何想法吗?

4

18 回答 18

280

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

于 2015-06-24T23:57:39.127 回答
53

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

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
于 2015-10-20T17:43:35.530 回答
29

您可以通过像这样运行显式加载 libjvm.dylib

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
于 2015-12-28T06:55:53.630 回答
27

在 macOS High Sierra (10.13.1) 和 Java 版本 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/
于 2017-12-06T23:07:04.627 回答
17

以下命令有效:

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 来工作,所以我现在正在使用那个包。希望对其他人有所帮助。

于 2016-01-21T11:06:24.517 回答
7

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

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
于 2017-06-21T21:08:19.030 回答
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")'
    
于 2016-11-16T19:13:12.570 回答
5

这是它的简单步骤:

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

于 2016-07-05T16:46:02.700 回答
3

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

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

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

于 2018-06-03T16:38:18.393 回答
1

检查 libjvm.dylib 文件的位置。

试试这个,在我的情况下这有效:

dyn.load('/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib')
library(rJava)
于 2018-04-04T10:37:31.120 回答
1

我完成了我能找到的所有故障排除,然后从以下位置安装了 jdk-11.0.1_osx-x64_bin.dmg:Oracle 下载

在那之后一切都很顺利。

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

于 2019-08-22T03:24:43.283 回答
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

(替换jdk1.8.0_131.jdk为您的 JDK 路径。)

于 2017-05-09T04:27:58.533 回答
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")

祝你好运。

于 2016-09-05T08:31:11.907 回答
1

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

于 2019-09-30T01:26:47.547 回答
0

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

于 2015-11-03T21:19:01.743 回答
0

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

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

于 2018-06-01T19:37:38.780 回答
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
于 2019-12-20T11:27:42.730 回答
0

下面的这一行已经解决了我在使用rJavapackage 时遇到的问题,就像本次讨论中的其他一些问题一样。我相信这个问题有不止一种解决方案,我真诚地感谢他们所有人的贡献,因为有时像下面这样的一行代码可以节省大量时间,避免浪费时间!

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
于 2017-08-29T08:39:06.833 回答