为啥 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 with
x64`(所以,我假设它也是 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:无法打开共享对象文件:没有这样的文件或目录