为什么R无法加载共享对象?

时间:2015-11-11 17:12:04

标签: r xlconnect

我正在尝试在R中使用XLConnect库。如果我执行

library(XLConnect)

我收到以下错误消息:

JAVA_HOME cannot be determined from the Registry

要解决此问题,我先设置JAVA_HOME变量:

Sys.setenv(JAVA_HOME='C:/Program Files (x86)/Java/jre1.8.0_65')
library(XLConnect)

看起来它有助于我走得更远,但后来又遇到了另一个问题:

unable to load shared object 'C:/Program Files/R/R-3.2.2/library/rJava/libs/x64/rJava.dll'

它想知道为什么R无法加载rJava.dll。至少此文件位于R搜索它的文件夹中:

C:\Program Files\R\R-3.2.2\library\rJava\libs\x64

ADDED

请注意rJava.dll文件存在,它位于那里,R正在搜索它。我想问题是32位和64位版本之间不兼容。我认为因为R抱怨:

% 1 is not a valid Win32 application

那么,为什么R期望它在名称中是Win32 application`? First, my OS is 64bit, second my Java is also for the 64bit and finally, the `rJava.dll` object is located in the folder with x64`(因此,我认为它也是64位版本)。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。请找到jvm.dll 应该在(您的JRE版本可能不同)

C:\Program Files (x86)\Java\jre1.8.0_65\bin\client

C:\Program Files (x86)\Java\jre1.8.0_65\bin\server

将此路径添加到您的Windows系统路径中,您可以继续使用。但请记住jre的版本和R应该是一致的,如果您的java位于Program Files其64位,那么从{{{ 1}}如果它在64 bit R中的32位那么使用Program Files (x86)

就像我的情况一样,它在64位enter image description here

中显示错误

但在32位完美工作 enter image description here

答案 1 :(得分:1)

您确实使用了/而不是\

Sys.setenv(JAVA_HOME='C:\\Program Files (x86)\\Java\\jre1.8.0_65') 
library(XLConnect)

我正在使用UNIX。因此,我不能自己测试,但你的路径也可能是错误的。

根据此post,您可以使用以下方法进行搜索:

find.java <- function() {
    for (root in c("HLM", "HCU")) for (key in c("Software\\JavaSoft\\Java Runtime Environment", 
        "Software\\JavaSoft\\Java Development Kit")) {
        hive <- try(utils::readRegistry(key, root, 2), 
          silent = TRUE)
        if (!inherits(hive, "try-error")) 
          return(hive)
    }
    hive
}
信用证转到@nograpes这个函数和article来帮助我给你答案。