动态库未在R二进制包构建中加载

时间:2014-11-22 11:11:53

标签: r dll compilation rstudio devtools

我正在尝试使用Windows环境中的“RStudio”和“devtools”在C中使用已编译的R代码构建一个包。

只有一个函数使用C文件夹中的src代码。源包工作正常。我可以使用所有功能。我能够使用devtools::document()编译C代码,相应的.dll.o文件也会出现在src文件夹中。然后我可以使用dev_tools::load_allCtrl+Shift+L加载代码并运行所有函数。

但是当我使用Ctrl+Shift+B构建和重新加载包时,我无法使用特定的功能。即使文档被保留,包中也缺少该函数。我也收到错误,告知没有加载相应的.dll

Error in library.dynam.unload(name, system.file(package = name)) : 
  DLL ‘mypackage.dll’ was not loaded

当我将devtools::buildbinary=TRUE一起使用时,我得到了相同的结果。

但是我可以在库.dll中找到Documents\R\win-library\3.0\mypackage\libs\i386\mypackage.dll文件。为什么没有加载编译代码中的动态库?

PS:1)devtools::has_devel()正在提供TRUE     2)我被迫使用.C而不是.Call

这是R CMD INSTALL

的结果
* installing to library 'C:/Users/lenovo/Documents/R/win-library/3.0'
* installing *source* package 'mypackage' ...
** libs
make: Nothing to be done for `all'.
installing to C:/Users/lenovo/Documents/R/win-library/3.0/mypackage/libs/i386
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (mypackage)

1 个答案:

答案 0 :(得分:1)

通过在R/文件夹中的文件中添加以下功能,我能够在Windows 10 R 3.5上解决此问题。

.onUnload <- function (libpath) { library.dynam.unload("mypackage", libpath)}

Here is the reference where I found it