【问题标题】:Can't load rJava on MacOS Mojave and R 3.5.2无法在 MacOS Mojave 和 R 3.5.2 上加载 rJava
【发布时间】:2019-03-08 04:10:20
【问题描述】:

我已经问过a similar question before,但没有得到任何我可以实际实施的答案。我也阅读了herehere 的答案,但无法实现其中任何一个(部分原因是没有答案实际上追溯了所有步骤。

问题

尝试在 R 3.5.2 和 MacOS Mojave 10.14.3 上加载 rJava 时出现错误:

> library(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':
  dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
  Reason: image not found

尝试的解决方案

我首先尝试了this solution,但没有成功。然后,基于this answer,我尝试了以下方法:

在终端输入以下内容:

$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home

然后在 R 上尝试以下操作:

> options("java.home"="/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home")
> 
> Sys.setenv(LD_LIBRARY_PATH='$JAVA_HOME/server')
> 
> dyn.load('/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib/server/libjvm.dylib')
> 
> library(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':
  dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
  Reason: image not found

我也试过了:

> options("java.home"="/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/bin")
> Sys.setenv(LD_LIBRARY_PATH='$JAVA_HOME/server')
> dyn.load('/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib/server/libjvm.dylib')
> library(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':
  dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
  Reason: image not found

过去,我已成功降级到 R 3.1,但我不想每次想使用 rJava 时都这样做

【问题讨论】:

    标签: r macos rjava


    【解决方案1】:

    这是适合我的设置

    1. macOS Mojave - 10.14.3

    2. XQuartz - 版本 2.7.11 - https://www.xquartz.org

    1. R - 版本 5.3.2

      > R --version
      R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
      Copyright (C) 2018 The R Foundation for Statistical Computing
      Platform: x86_64-apple-darwin15.6.0 (64-bit)
      
      R is free software and comes with ABSOLUTELY NO WARRANTY.
      You are welcome to redistribute it under the terms of the
      GNU General Public License versions 2 or 3.
      For more information about these matters see
      http://www.gnu.org/licenses/.
      
    2. Java - 11.0.1

      > java -version
      java version "11.0.1" 2018-10-16 LTS
      Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
      Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
      
    3. rJava - 从 CRAN 安装

      > > install.packages("rJava")
      --- Please select a CRAN mirror for use in this session ---
      Fontconfig warning: ignoring UTF-8: not a valid region tag
      trying URL 'https://cloud.r-project.org/bin/macosx/el-         
      capitan/contrib/3.5/rJava_0.9-10.tgz'
      Content type 'application/x-gzip' length 739259 bytes (721 KB)
      ==================================================
      downloaded 721 KB
      
      
      The downloaded binary packages are in
      /var/folders/...
      > library(rJava)
      >
      

    更新

    在您的情况下,rJava 安装/编译期间使用的 JDK 似乎丢失了。您可以从消息中看出:

    dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
    Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
    Reason: image not found
    

    确保此文件存在:

    /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
    

    可能,它不见了。您有两个选择:安装 Java 11.0.1,重新配置 R。

    您可以使用/usr/libexec/java_home -V列出所有可用的JVM安装

    重现最初的问题并修复它

    1. 假设我们已经删除了 JDK 11.0.1

      > pwd /Library/Java/JavaVirtualMachines
      > tree -L 1
      .
      |-- jdk-11.0.1.jdk~
      `-- jdk-11.0.2.jdk
      > java -version
      java version "11.0.2" 2019-01-15 LTS
      Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
      Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
      
    2. 让我们尝试加载 rJava

      > R
      
      R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
      Copyright (C) 2018 The R Foundation for Statistical Computing
      Platform: x86_64-apple-darwin15.6.0 (64-bit)
      
      ...
      ...
      ...
      
      > library(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':
        dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
        Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
        Reason: image not found
      
    3. 让我们修复它

      > sudo R CMD javareconf
      Java interpreter : /usr/bin/java
      Java version     : 11.0.2
      Java home path   : /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
      Java compiler    : /usr/bin/javac
      Java headers gen.: /usr/bin/javah
      Java archive tool: /usr/bin/jar
      
      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/jdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/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/jdk-11.0.2.jdk/Contents/Home/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
      
      
      JAVA_HOME        : /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
      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.
      
    4. 现在应该可以工作了

      > R
      
      R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
      Copyright (C) 2018 The R Foundation for Statistical Computing
      Platform: x86_64-apple-darwin15.6.0 (64-bit)
      
      ...
      ...
      ...
      
      > library(rJava)
      > quit()
      

    【讨论】:

    • 不幸的是,这不是完全相同的环境。看看更新。
    • 你是对的,当然。我正在运行 JDK 11.0.2。不过, sudo R CMD javareconf 仅适用于 R 终端。知道为什么这在 R GUI 上不起作用吗?无论如何,我刚刚安装了 JDK 11.0.1 并让它在 R GUI 上运行。非常感谢!
    【解决方案2】:

    我遇到了类似的问题。如果您尝试了所有这些解决方案并且没有任何效果,那么通常最好从头开始。您不希望这些“修复”之一给您带来更多问题,因为它们中的大多数都需要您更改环境变量。

    这是我修复它的方法。

    1. 安装最新的JAVA JDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    2. 在终端中运行sudo R CMD javareconf。请勿自行更改任何环境变量。

    希望对你有帮助。

    【讨论】:

    • 很遗憾没用。我也是从头开始的。完成所有操作后,我格式化了我的 HD 并重新安装了 MacOS。
    • 好的,这仅适用于使用 R 终端的情况。知道为什么这在 R GUI 上不起作用吗?
    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多