为啥 R 无法加载共享对象?

Posted

技术标签:

【中文标题】为啥 R 无法加载共享对象?【英文标题】:Why R is unable to load a shared object?为什么 R 无法加载共享对象? 【发布时间】:2015-11-11 17:12:04 【问题描述】:

我正在尝试在 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

添加

请注意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 withx64`(所以,我假设它也是 64 位版本)。

【问题讨论】:

创建并放置它要查找的文件夹? 我错过了什么吗?这些路径在我看来是一样的。 您确定 java 是适合您的 OS/r 版本(即 32 与 64 位)的正确版本吗? ***.com/questions/7019912/… 和评论中的其他一些链接 ***.com/questions/29186040/… 我建议改用readxl。该软件包包括 C 和 C++ 库,使用起来更简单,可能更快。尽快从那里取出 excel 数据,然后在 R 中进行后处理:这就是 readxl 擅长的。 @Roman:你说你有 64bits OS 和 Java 64bits 但是 R 呢?您使用的是 32 位还是 64 位版本? 【参考方案1】:

我遇到了同样的问题。请找到 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 位中,那么从 64 bit R 启动如果它在Program Files (x86)它的32位所以使用32 bit R

就像我的情况一样,它在 64 位 中显示错误

但在 32 位下完美运行

【讨论】:

【参考方案2】:

您确实使用了/ 而不是\

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 帮助我为您提供答案。

【讨论】:

以上是关于为啥 R 无法加载共享对象?的主要内容,如果未能解决你的问题,请参考以下文章

加载共享库时出错,无法打开共享对象文件:没有这样的文件或目录(hiredis)

加载共享库时出错:libgmock.so:无法打开共享对象文件:没有这样的文件或目录

无法加载动态库“libcupti.so.11.0”; dlerror: libcupti.so.11.0: 无法打开共享对象文件

加载共享库时出错:libgfortran.so.1:无法打开共享对象文件:没有这样的文件或目录

docker compose:加载共享库时出错:libz.so.1:无法从共享对象映射段:不允许操作

clang:加载共享库时出错:libtinfo.so.5:无法打开共享对象文件:没有这样的文件或目录