使用预编译的共享库构建R包

rem*_*mek 4 dll r shared-libraries package

我正在编写一个R包的问题,​​我正在编写并尝试使用预编译的共享库进行构建.让我试着简要描述一下这个问题:

  • 这个包(让我们称它mypack)依赖于一个mylib.dll已编译的共享库,并且在构建R包时无法动态编译.
  • 该库mylib.dll已在Windows下的x64机器上编译,可以在R中加载dyn.load.
  • 包中包含所需的文件NAMESPACE,useDynLib(mylib.dll)指定的位置..onLoad包含该指令的函数library.dynam('mylib.dll', pkg, lib)也在文件中指定zzz.R.
  • 使用通常的命令mypack构建R包,然后我添加一个保存的目录.RtoolsRcmd INSTALLlibsmylib.dll
  • 当我尝试在R中加载包时library(mypack),我收到以下错误消息:
    Error: package 'mypack' is not installed for 'arch=x64'

这令我感到困惑.为什么共享库可以在R中顺利加载,但是当我使用它构建一个包时,我收到这个奇怪的错误消息?

非常感谢您的帮助!

Spa*_*man 6

该错误消息来自以下代码library:

 if (nzchar(r_arch) && file.exists(file.path(pkgpath, 
            "libs")) && !file.exists(file.path(pkgpath, "libs", 
            r_arch))) 
            stop(gettextf("package %s is not installed for 'arch=%s'", 
                sQuote(pkgname), r_arch), call. = FALSE, domain = NA)
Run Code Online (Sandbox Code Playgroud)

这告诉我你的构建包中需要一个{package}/libs/{arch}文件夹(即已安装的目录),其中{arch}与你的系统的arch一致,如下所示 r_arch <- .Platform$r_arch

我猜你的构建未能正确地做到这一点.您的源代码中是否有任何C代码?