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

Cro*_*ops 5 dll r compilation devtools rstudio

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

\n\n

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

\n\n

但是,当我使用 构建和重新加载包时Ctrl+Shift+B,我无法使用特定的功能。即使保留了文档,该功能也从包中丢失了。我还收到错误消息,提示.dll未加载相应的内容。

\n\n
Error in library.dynam.unload(name, system.file(package = name)) : \n  DLL \xe2\x80\x98mypackage.dll\xe2\x80\x99 was not loaded\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我使用devtools::buildwith时,我得到相同的结果binary=TRUE

\n\n

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

\n\n

PS:1)devtools::has_devel()给出TRUE\n 2)我被迫使用.C而不是.Call.

\n\n

这是结果R CMD INSTALL

\n\n
* installing to library 'C:/Users/lenovo/Documents/R/win-library/3.0'\n* installing *source* package 'mypackage' ...\n** libs\nmake: Nothing to be done for `all'.\ninstalling to C:/Users/lenovo/Documents/R/win-library/3.0/mypackage/libs/i386\n** R\n** preparing package for lazy loading\n** help\n*** installing help indices\n** building package indices\n** testing if installed package can be loaded\n* DONE (mypackage)\n
Run Code Online (Sandbox Code Playgroud)\n

Øys*_*n S 3

通过将以下函数添加到文件夹中的文件,我能够在带有 R 3.5 的 Windows 10 上解决此问题R/

.onUnload <- function (libpath) { library.dynam.unload("mypackage", libpath)}
Run Code Online (Sandbox Code Playgroud)

这是我找到它的参考