"upgrading" 到 OSX Yosemite 之后 RStudio/R 中的 rJava 加载错误

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

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

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

在尝试所有这些时的某个时候,我能够加载 rJava 而不会导致 R 崩溃,但是却收到上面发布的错误消息。另外,当我退出RStudio时,它似乎正常关闭,但随后会弹出"RStudio quit unexpectedly"消息,表明程序在尝试关闭时崩溃了。

我最终决定安装 Java for OS X 2014-001 (Java 6),因为我似乎 运行 没有选择。现在,当我打开 R 或 RStudio 时,"This software needs 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 window,我也能够加载 rJava 和依赖它的包而不会出错。

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

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

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

我遇到了同样的问题,并且经历了与你相同的步骤。允许通过 Finder/Spotlight 启动 RStudio 的最后一步是 link libjvm.dylib 到 /usr/local/lib:

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

-f 标志以强制覆盖现有的 file/link

在 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: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+。 (我现在也在 macOS Sierra (10.12) 和 R.3.3.1 上进行了测试。)

P.S。 #2 我发现 openxlsx 更快并且不依赖于 Java 来工作,所以我现在正在使用那个包。希望能帮到别人。

这里是简单的步骤:

  1. 删除 rJava 包:remove.packages(rJava)
  2. 关闭R
  3. 为您安装最新的 Java mac
  4. 打开终端并输入此命令:sudo R CMD javareconf
  5. 打开 R 并使用以下命令安装 rJava:

    install.packages("rJava", dependencies=TRUE, type="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. 加载您的library("rJava", "RWeka")

祝你好运。

这就是我在两个 Macs 运行 Mac OS X El Capitan (10.11.6) 上正常工作的配置方式:

  1. 通过在终端 window 中发出以下命令来卸载 '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 windows(以获取对 .bashrc 的更改)。

  5. 运行 在终端中执行以下命令 window:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
    
  6. 运行 在终端 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

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

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

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 版本 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/

检查 libjvm.dylib 文件的位置。

试试这个,在我的例子中这很有效:

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

运行 命令行中的以下内容:sudo R CMD javareconf

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

使用最新的 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

我完成了我能找到的所有故障排除,然后安装了 jdk-11.0.1_osx-x64_bin.dmg 来自:Oracle downloads

之后一切正常。

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

我注意到 'rJava' 在 Rstudio 中加载时对 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

而且令人惊讶的是,它就像一个魅力...
顺便说一句,运行 'rJava' 按照本机 R 中的先前说明没有问题。

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