[英]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的混合是一团糟,尽管它非常有用。 我一直在为每个发行版的多个版本处理此问题,无论您多么小心,它似乎都会定期被咬。 就是说,有很多事情要牢记:
libjvm.dylib
的位置。 javareconf
脚本无法正确地重新配置 R; 它需要重新安装R才能正确执行。 因此,请牢记以下几点:
JAVA_HOME
(通常在〜/ .bashrc或〜/ .bash_profile中 )。 javareconf
脚本,以使其为现代JDK配置。 在终端上,对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链接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进行编译,请确保也安装它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.