【问题标题】:R, loading rJava errorR,加载 rJava 错误
【发布时间】:2017-10-24 18:25:40
【问题描述】:

我在 macOS sierra (10.12.5) 上运行 R(版本 3.4.0),我正在尝试使用需要使用 rJava 库的 xlsx 库。

当我尝试在 R 控制台中使用 library(rJava) 加载 rJava 时(在 RStudio 或终端中没有区别),我收到以下错误消息,我无法理解:

Fehler: package or namespace load failed for ‘rJava’:
 .onLoad in loadNamespace() für 'rJava' fehlgeschlagen, Details:
  Aufruf: dyn.load(file, DLLpath = DLLpath, ...)
  Fehler: kann shared object '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so' nicht laden:
  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

在谷歌上搜索问题,我发现许多帖子有点相似(但每次问题略有不同),this SO question 是其中最有希望的。

由于建议的步骤需要根据我的情况进行调整,而且我是新手,因此无法实施。我能做什么?

附加信息:

shell 命令java -version 返回:

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

而shell命令R CMD javareconf返回:

Java interpreter : /usr/bin/java
Java version     : 1.8.0_131
Java home path   : /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar
Non-system Java on macOS

trying to compile and link a JNI program 
detected JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include/darwin  -I/usr/local/include   -fPIC  -Wall -g -O2  -c conftest.c -o conftest.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -    L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation


JAVA_HOME      /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Java library path: $(JAVA_HOME)/lib/server
JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
Updating Java configuration in /Library/Frameworks/R.framework/Resources
Done.

任何帮助将不胜感激!

【问题讨论】:

    标签: java r rjava


    【解决方案1】:

    不同版本的 MAC OS 的 JAVA_HOME 路径不同。在某些情况下,有/jre 文件夹,在某些情况下,它不是在/Home 导演之后使用终端中的CD 命令手动转到/server 文件夹并使用pwd 复制整个路径,使用它来设置java.home然后您可以轻松加载rJava 库。这就是我能够解决问题的方法

    options("java.home"="/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/lib")
    
    Sys.setenv(LD_LIBRARY_PATH='$JAVA_HOME/server')
    
    dyn.load('/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/lib/server/libjvm.dylib')
    
    library(rJava)
    

    【讨论】:

    • 非常感谢您的回答。我尝试了几个 SO 帖子,这适用于 macOS High Sierra。当然,我不得不更改 jdk-10.jdk。谢谢@vinay-karagod
    【解决方案2】:

    有效!

    在安装和重新安装不同的 java 版本并使用 R 命令 install.packages("rJava") 重新安装 rJava 之后,我发现在 R 控制台(shell 窗口)中加载库不再抛出错误消息。

    之后,我可以使用this post 中的答案,通过运行以下 shell 命令使其在 RStudio 中工作:

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

    毕竟不是太复杂!谢谢大家的耐心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2020-04-09
      • 2014-08-01
      • 2015-08-24
      • 2015-02-24
      相关资源
      最近更新 更多