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


122

我最近从OSX Mountain Lion升级到优胜美地,从R 3.1.3升级到3.2。升级后,当我打开R或RStudio时,立即弹出消息,提示我需要安装rJavaJava6 。此外,加载或依赖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,如下所示:

    须藤R CMD javareconf -n

  • 检查options("java.home")并发现此设置为 NULL。我尝试将其设置为以下内容(针对此SO问题):

    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:打开-a RStudio

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

最后,我尝试从命令行运行R(我之前没有做过)。事实证明,在命令行上,加载rJava或依赖于rJava工作且不会引发任何错误的。

所以,我现在可以 rJava如果我从命令行打开RStudio,并使用赋予RStudio Java路径的代码,开始工作(如上所述)。但是,我想找到一种解决潜在问题的方法,无论它可能是什么,以便可以用Mac惯用的方式打开RStudio,而无需使用命令行。我还担心安装旧版本的Java可能会导致问题。

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


在El Capitan,此解决方案仍然对您有用吗?在使用LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudio技巧之前,我已经开始使用此工具,但是它不再起作用。我写了一篇有关此问题的博客文章,并在那里描述了此问题。我想知道其他人在此配置中是否也遇到此问题,或者这是我的错。
保罗·克莱姆

我仍在使用Yosemite,所以不确定。请参阅以下有关的答案El Capitan
eipi10

好的,我想我会再发布一个新问题。是的,El Capitan下面的解决方案在按预期RStudio加载后会很有帮助rJava
Paul Klemm

2
在我重新启动RStudio之后,它起作用了
Pranay Aryal

诊断时,尝试otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so 获取共享库的列表以及如何解析它们。我不确定如何发现的运行时内容@rpath
Dave X

Answers:


279

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


4
从El Capitan升级到Sierra后解决了相同的问题。+1
Murta 2016年

2
这解决了很多问题;特别是如果原始错误是由cannot jfindclass[[1]]rJava和JDBC驱动程序引起的
Jenks

1
每当我在Macbook Pro上更新Java时,都必须运行此命令。它仍可在macOS Sierra 10.12.5和Java版本8 Update 141上运行
。– thiagoveloso

11
这几乎对我有用。另外/usr/local/lib/libjvm.dylib,由于/ usr / local / lib /似乎不在@rpath上,因此我必须在R框架中向该文件添加一个符号链接。例如:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X


53

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

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

29

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

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)

可以肯定,但不方便。可接受的答案可能是一个更好的选择。+1提供替代方案。
thiagoveloso

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/

太棒了 可行!似乎有关El Capitan的建议不适用于Sierra
KarthikS,

非常感谢,这对我也很有效。macOS High Sierra 10.13.2
pat_krat

这对我有帮助。我没有做通知R部分。它仍然有效。非常感谢:)
赶快

17

以下命令有效:

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

之后,在RStudio中,加载rJava通过加载“ xlsx”包进行。

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来工作,所以我现在正在使用该软件包。希望对别人有帮助。


1
谢谢你,我的朋友,你救了我的日子。我尝试了其他解决方案,但这是解决了我问题的解决方案。
Matteo De Felice

1
另一个El Cap用户(但使用MacGUI)表示感谢。自从第一次尝试以来,就进行了此操作,因为它看起来最简单(并且早期的安装Java运行时1.6的说明还没有解决问题),并立即通过pkg:rJava和依赖项pkg; XLConnect取得了成功。可能需要安装可从Oracle获得并从Apple页面链接的旧版Java 1.6。
IRTFM

1
嗨,您的建议也适用于MacOS High Sierra,非常感谢!
user8193079

1
openxlsxFTW!
加载

是! @iled:我同意,openxlsx无论如何最好使用。
桑德·W·范德兰

7

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

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

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

在执行此操作时,我收到licuuc库/链接器错误,您能解释一下吗?尝试在macOS Sierra上安装,更多信息请参见El Capitan的早期版本。
hhh

5

这是简单的步骤:

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

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


我实际上是在结束这里之前做的。它使我的rjava依赖库得以安装,但没有启动。该联libjvm.dylib/usr/local/lib使它也开始:)
jonalv

3

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

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

R CMD javareconf JAVA_CPPFLAGS = -I /系统/库/框架/JavaVM.framework/标题


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

祝你好运。


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路径代替。)


2
我有自制R,对我有用的确切命令是:install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/server /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so。我能够看到rpath不见了otool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian

@Ian也许您知道这里的解决方案,这里我已经用Homebrew安装了Java,现在试图使rJava正常工作。有想法吗?
hhh

1

检查libjvm.dylib文件的位置。

尝试一下,在我的情况下,这可行:

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

1

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

在那之后,一切都运转良好。

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


1

我注意到,在Rstudio中加载时,“ rJava”对于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”没有问题。



0

下面的这一行解决了我rJava在本程序包中遇到的与本次讨论中的其他程序相同的问题。我敢肯定,有一个以上的解决方案可以解决这个问题,我衷心感谢他们的贡献,因为有时候像下面这样的一行可以节省很多时间!

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

0

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

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


我尝试了您的解决方案,sudo R CMD javareconflibrary(rJava)仍然给出了相同的错误: Error: package or namespace load failed for ‘rJava’: .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.5/Resources/library/rJava/libs/rJava.so': ... Reason: image not found
Lazarus Thurston,

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.