无法在Mac OS 10.11上加载R xlsx包

42

我可以加载rJava和xlsxjars包,但是当我执行library(xlsx)时,会出现“未能加载JVM”的错误。以下是我的详细信息。

操作系统版本:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11
BuildVersion:   15A284

Java 版本:

$ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

Java路径:

$ which java
/usr/bin/java

Java主目录:

$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home

R版本:

$ R --version
R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin13.4.0 (64-bit)

我如何启动 R:

$ LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudio

成功加载rJava和xlsxjars软件包:

> library(rJava)
> library(xlsxjars)

尝试加载 xlsx 包时未成功:

> library(xlsx)
JavaVM: requested Java version ((null)) not available. Using Java at "" instead.
JavaVM: Failed to load JVM: /bundle/Libraries/libserver.dylib
JavaVM FATAL: Failed to load the jvm library.
Error : .onLoad failed in loadNamespace() for 'xlsx', details:
  call: .jinit()
  error: JNI_GetCreatedJavaVMs returned -1
Error: package or namespace load failed for ‘xlsx’

R配置:

Matts-MacBook-Pro:~ matt$ R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 1.8.0_65
Java home path   : /Library/Java/JavaVirtualMachines/jdk1.8.0_65.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 OS X

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_65.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jre/../include/darwin -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include    -fPIC  -Wall -mtune=core2 -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_65.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_65.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

R CMD javareconf 是什么意思? - user3710546
1
也许readxl包中的read_excel函数可以作为一种替代方案? - ekstroem
5个回答

62

不幸的是,这些符号链接技巧对我没有帮助。但是,我在stackoverflow上找到了一个类似的问题!(还有哪里呢;))

以下步骤对我起作用:

  • 在终端输入以下内容以正确重新链接Java:

  • sudo R CMD javareconf
    
  • 回到R(或RStudio)中,从源安装rJava包:

  • install.packages("rJava",type='source')
    

    希望这可以帮助你!


    8
    我后来必须这样做才能使其正常工作:https://dev59.com/JV0a5IYBdhLWcg3wD1Pb - ndimhypervol
    在 Tobias Mini 添加链接创建行之后可以正常工作。 - slymore
    根据ndimhypervol提供的链接,我还需要运行以下命令sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib。 - Martin
    在第二步中,需要在终端中以sudo R身份运行,然后执行install.packages(...) - avriis
    无法工作:配置错误:一个或多个JNI类型与相应的本机类型不同。您可能需要使用非标准编译器标志或不同的编译器以解决此问题。 错误:“rJava”包的配置失败。 - Steffen Moritz

    14

    我也遇到了像 openNLP、xlsx、RWeka 等包的加载问题,得到了与您相同的错误信息。 但是最终在 OS X 10.11.3 上执行以下命令可以解决问题: sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib


    2
    在10.12 Sierra上,xlsx对我不起作用。如果我运行该命令,它会返回“ln:/usr/local/lib/libjvm.dylib:文件已存在”,但我仍然收到错误提示。 - Dambo

    2
    R xlsx包构建的Java版本可能存在问题。一些旧软件需要安装适用于OS X 10.11 El Capitan、OS X 10.10 Yosemite、OS X 10.9 Mavericks、OS X 10.8 Mountain Lion和OS X 10.7 Lion的Java 6。
    您可以尝试在苹果网站上安装这个旧版本的Java(Java for OS X 2015-001),链接如下: https://support.apple.com/kb/DL1572?locale=pt_BR&viewlocale=en_US 请检查是否已经安装了Java SE Development Kit 8。您可以从Oracle网站下载它,链接如下: www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 我遇到了同样的问题,下载旧版本的Java解决了问题。希望这能帮到您!

    1
    基本上,只需按照以下描述操作: https://oliverdowling.com.au/2015/10/09/oracles-jre-8-on-mac-os-x-el-capitan/ 简短版本: 从Oracle下载Java JRE的tar文件 http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html 然后将此放入您的终端中(对于sudo,需要输入密码):
    cd ~/Downloads
    tar -xzf `ls -1r jre-*-macosx-x64.tar.gz | head -1`
    cd `ls -1rd jre*/ | head -1`
    defaults write `pwd`/Contents/Info.plist JavaVM -dict-add 'JVMCapabilities' '<array><string>JNI</string><string>BundledApp</string><string>CommandLine</string></array>'
    plutil -convert xml1 Contents/Info.plist
    sudo mv `pwd` /Library/Java/JavaVirtualMachines/
    mkdir -p Contents/Home/bundle/Libraries
    cd Contents/Home/bundle/Libraries
    ln -s ../../lib/server/libjvm.dylib libserver.dylib
    

    在我的 OS X 10.11 上正常工作


    6
    请非常小心处理这个命令——"sudo mv pwd /Library/Java/JavaVirtualMachines"将会把pwd路径下的所有内容移动到Java文件夹中。 - Andrew
    4
    我这样做了...当然它崩溃了,把我所有的文件都移动到了JVM文件夹里。我该如何“撤销”它?警告其他人:不要这样做!! - user1318135
    1
    为什么mv pwd而不是mv . - Olathe
    这很危险,可能会破坏你的系统。 - pachadotdev
    这对我有用(使用macOS Sierra版本10.12,2015年中期的15寸MacBook Pro带有16GB内存 - 适用于所有拥有相同设备的人) - Robert Tomas G IV

    0
    对我来说,在MacOS Catalina 10.15.7上,安装当前的JRE和JDK软件非常简单(从java.com和oracle.com官方分发网站下载.dmg文件-没有任何关联!)。
    我还重新安装了rJava包,但我不觉得这是必要的。实际上,我只是没有在我的电脑上安装Java。
    现在,xlsx包可以加载了。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接