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

时间:2017-06-05 23:10:01

标签: java r rjava

我最近将R更新为3.4并将RStudio更新为其RStudio v1.0.143 Preview,以便它与图像更新兼容R的图,但是现在我在尝试加载它或需要它的包时遇到了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

如何解决这个问题的任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:2)

正如@mko已经指出的那样,macOS / R / rJava的混合是混乱的,虽然是非常有用的。我已经在每个版本的几个版本中争论这个问题,无论你多么小心,它似乎会定期再次咬人。也就是说,要记住各种各样的事情:

  • 您需要安装JDK,而不仅仅是安装JRE。
  • 如果不使用已弃用的Apple版Java 1.6,则R的javareconf脚本无法正确处理libjvm.dylib的位置。
  • 最好使用最新的JDK版本,以便从最新的安全增强功能中受益。
  • R javareconf脚本在升级到新的Java版本后无法正确重新配置 R;它需要重新安装R才能正确完成。

所以,请记住这些:

  • 安装/更新JDK。
  • 对于您计划使用的任何JDK安装(通常在〜/ .bashrc 〜/ .bash_profile ),正确设置JAVA_HOME是个好主意
  • 安装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,幸运的是。作为参考,我最近还就此问题写了一篇简短的article

答案 1 :(得分:0)

rJava,R,Java和macOS是一团糟。

你可以做的是尝试从源头重建rJava。

确保重新配置Java。由于事实上javareconf在macOS和JAVA上做了很多强有力的假设(其中一个是,只要你有#34; Home"字,在JAVA_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,这些开关将使用基于JNI的代码编译生成gcc

`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链接 javac javah jar 的黑客攻击。一旦./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