繁体   English   中英

最近更新的R / RStudio,无法加载rJava。

[英]Recently updated R / RStudio, rJava could not be loaded.

我最近将R更新到3.4,并将RStudio更新到了RStudio v1.0.143预览版,以便与R的图像更新和绘图兼容,但是现在我在尝试加载rJava或需要它的软件包时遇到了rJava问题。 如下:

Loading required package: 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.4/Resources/library/rJava/libs/rJava.so': dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
Referenced from: 
 /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
  Reason: image not found
Error: package ‘rJava’ could not be loaded

我目前正在运行MacOSX 10.12.4 Sierra

非常感谢您提供有关如何解决此问题的帮助。

正如@mko所指出的那样,macOS / R / rJava的混合是一团糟,尽管它非常有用。 我一直在为每个发行版的多个版本处理此问题,无论您多么小心,它似乎都会定期被咬。 就是说,有很多事情要牢记:

  • 您将需要JDK安装,而不仅仅是JRE安装。
  • 如果未使用过时的Apple版本的Java 1.6,R的javareconf脚本将无法正确处理libjvm.dylib的位置。
  • 最好使用最新的JDK版本来受益于最新的安全性增强功能。
  • 升级到新的Java版本后,R的javareconf脚本无法正确地重新配置 R; 它需要重新安装R才能正确执行。

因此,请牢记以下几点:

  • 安装/更新JDK。
  • 最好为打算使用的JDK安装正确设置JAVA_HOME (通常在〜/ .bashrc〜/ .bash_profile中 )。
  • 如果尚未安装,请安装XQuartz(如@mko所述)。
  • (重新)安装R(以针对新的Java安装允许正确的R配置。
  • 使用自定义参数运行javareconf脚本,以使其为现代JDK配置。
  • 将Java运行时链接到R的库文件夹可以找到它。

在终端上,对javareconf的自定义调用只有几行:首先,确保已根据需要设置JAVA_HOME:

# Make sure JAVA_HOME is set as required.
export JAVA_HOME=${JAVA_HOME:-$(/usr/libexec/java_home)}
# Obtain location of Java runtime library.
export LIBJVM=$(find "${JAVA_HOME}" -name 'libjvm.dylib')
# Reconfigure R using custom call to javareconf script.
R CMD javareconf JAVA_LIBS="${LIBJVM}" JAVA_LD_LIBRARY_PATH="${LIBJVM}" JAVA_CPPFLAGS="'-I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin -I$(dirname "${LIBJVM}")'"
# Link Java runtime to R library folder so it can be found.
ln -fs "$LIBJVM" /Library/Frameworks/R.framework/Libraries

现在您应该能够启动R并安装rJava ok。

如果您使用的是R的Homebrew安装(需要使用--with-java选项进行安装),请改用此行链接Java运行时:

ln -fs "$LIBJVM" "$(brew --prefix r)/lib"

该过程需要macOS的管理员权限(除非通过Homebrew安装了R)。 R软件包安装程序授予管理员对各种文件的权限,因此幸运的是,不需要sudo 作为参考,我最近也写了一篇关于这个问题的简短文章

rJava,R,Java和macOS一片混乱。

您可以做的是尝试从源代码重建rJava。

确保重新配置Java。 由于javareconf在macOS和JAVA方面做出了很多强有力的假设(其中之一是,每当在JAVA_HOME变量中使用“ Home”一词时,它都会假设您要使用系统范围的Java-不太好想法),您需要:

  • 在JDK中创建“人工”主页,例如

    cd /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents ln -s Home RHome

  • 将RHome导出为JAVA_HOME

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/RHome

运行带有大量开关的javareconf,这些开关将使gcc与基于JNI的代码编译

`sudo R CMD javareconf JAVA_HOME=${JAVA_HOME} JAVA=${JAVA_HOME/bin/java JAVAC=${JAVA_HOME}/bin/javac JAVAH=${JAVA_HOME}/bin/javah JAR=${JAVA_HOME}/bin/jar JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/server JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin"`

下载rJava软件包并尝试手动重建(R之外)

https://cran.r-project.org/web/packages/rJava/index.html

> curl https://cran.r-project.org/src/contrib/rJava_0.9-8.tar.gz -o rJava_0.9-8.tar.gz
> tar zxf rJava_0.9-8.tar.gz
> cd rJava
> ./configure

如果通过,则启动R(在设置env的同一控制台中)

> install.packages("rJava", type="source")

请注意,对于杂乱的Java安装(Apple的JRE,Oracle的JDK),您可能需要首先正确地设置Java env。 可能您需要一些“肮脏”的技巧,在这些技巧中,您可以从JRE内的JDK链接javacjavahjar 您将知道何时需要执行一次./configure抱怨缺少命令。

也可能需要更新文件

`/usr/libexec/java_home`/../Info.plist

并确保您的JVM可以处理JNI。 您需要更改:

<key>JVMCapabilities</key>
<array>
  <string>CommandLine</string>
</array>

<key>JVMCapabilities</key>
<array>
  <string>CommandLine</string>
  <string>JNI</string>
</array>

经过一番挣扎,您可能会使其工作正常。 但是,它实际上取决于系统。 很大程度上取决于您拥有的R版本,是否安装了JDK以及默认的JVM是什么。

注意!

rJava需要XQuartz进行编译,请确保也安装它

https://www.xquartz.org

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM