我正在尝试使用Windows环境中的“RStudio”和“devtools”在C
中使用已编译的R
代码构建一个包。
只有一个函数使用C
文件夹中的src
代码。源包工作正常。我可以使用所有功能。我能够使用devtools::document()
编译C代码,相应的.dll
和.o
文件也会出现在src
文件夹中。然后我可以使用dev_tools::load_all
或Ctrl+Shift+L
加载代码并运行所有函数。
但是当我使用Ctrl+Shift+B
构建和重新加载包时,我无法使用特定的功能。即使文档被保留,包中也缺少该函数。我也收到错误,告知没有加载相应的.dll
。
Error in library.dynam.unload(name, system.file(package = name)) :
DLL ‘mypackage.dll’ was not loaded
当我将devtools::build
与binary=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)
答案 0 :(得分:1)
通过在R/
文件夹中的文件中添加以下功能,我能够在Windows 10 R 3.5上解决此问题。
.onUnload <- function (libpath) { library.dynam.unload("mypackage", libpath)}