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

我试图在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 FilesRR-3.2.2libraryrJavalibsx64

添加

请注意, 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 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名称中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` 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中(因此,我认为它也是64位版本)。


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

C:Program Files (x86)Javajre1.8.0_65binclient

要么

C:Program Files (x86)Javajre1.8.0_65binserver

但是请记住jre和R的版本应该是一致的,如果你的java在Program Files是64位的,那么从64 bit R启动它,如果它在Program Files (x86)的32位,所以使用32 bit R

就像我的情况一样,它显示了64位的错误 在这里输入图像描述

但在32位完美工作 在这里输入图像描述


您确实使用/而不是

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

我正在使用UNIX。 所以我不能自己测试,但你的路可能也是错的。

根据这篇文章,你可以使用这个搜索它:

find.java <- function() {
    for (root in c("HLM", "HCU")) for (key in c("SoftwareJavaSoftJava Runtime Environment", 
        "SoftwareJavaSoftJava Development Kit")) {
        hive <- try(utils::readRegistry(key, root, 2), 
          silent = TRUE)
        if (!inherits(hive, "try-error")) 
          return(hive)
    }
    hive
}

信用去@nograpes的功能和本文帮助我给你答案。

链接地址: http://www.djcxy.com/p/88807.html

上一篇: Why R is unable to load a shared object?

下一篇: Use ostream with bases other than 8, 10 and 16