inDL(x, as.logical(local), as.logical(now), ...) 错误:无法加载共享对象

Error in inDL(x, as.logical(local), as.logical(now), ...) : unable to load shared object

我在尝试附加包 tidyselect 和尝试调用 tidyselect::any_function.

时遇到此错误

错误发生在 Rstudio 或类似的命令行中,在 RStudio 中它会在我输入时立即触发: tidyselect:: ,尽管 ?tidyselect:: 工作正常而且我可以调用?tidyselect::any_function.

的帮助

这也有效:

packageVersion("tidyselect") # [1] ‘0.2.4

它曾经有效,我不明白发生了什么变化,我只知道包 rjava 已经安装,管理员可能也改变了一些东西。

首先弹出窗口显示:

The procedure entry point R_ContinueUnwind could not be located in the dynamic link library R.dll

然后在控制台中显示错误:

Error in inDL(x, as.logical(local), as.logical(now), ...) :

unable to load shared object '//edited_UNC_path.com/edited_path/tidyselect/libs/x64/tidyselect.dll':

LoadLibrary failure: The specified procedure could not be found.

dll 文件存在:

file.exists('//edited_UNC_path.com/edited_path/tidyselect/libs/x64/tidyselect.dll') # [1] TRUE

配置:

sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.3.1

知道如何解决这个问题吗?

通过使用 :

重新安装 tidyselect 解决了这个问题
install.packages("tidyselect",INSTALL_opts="--no-multiarch")

(尽管可以使用 install.packages("tidyselect") 安装软件包而不会出错。

This answer 向我指出了解决方案(尽管是完全不同的问题)。

看来确实是 rjava 的问题。

引用链接的答案:

the solution was to use install option that simply forgets about i386 architecture. (also works with drat library and packages not from CRAN

尽管对我来说都是中文,?utils::install.packages 没有帮助,我会很乐意投票/接受解释发生了什么的答案。

我不知道为什么会发生这种情况,因为我目前正面临同样的问题。不管怎样,我可以解释你的解决方案。

32 位与 64 位

你的系统是64位的,如你的sessionInfo()所示。 i386 架构适用于 32 位的旧系统(它们只能处理有限数量的内存,因为它们使用 32 位内存地址,而 64 位系统在今天实际上是无限的)。

R 中发生了什么

R 中的经典安装是 "multiarch" 用于多体系结构,这意味着 32 位和 64 位。在 64 位系统中构建 32 位软件没有问题。但是,您可能没有为这两种体系结构安装所有依赖项(例如 C++ 库)。您的 32 位安装显然有问题。然后用 INSTALL_opts="--no-multiarch" 安装包只安装 64 位版本(你需要的那个),没有问题。