4

我正在编写并尝试使用预编译的共享库构建的 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
  • R 包mypackRtools使用常用命令构建的Rcmd INSTALL,然后我libs在其中添加一个保存目录mylib.dll
  • 当我尝试在 R 中加载包时library(mypack),我收到以下错误消息:
    Error: package 'mypack' is not installed for 'arch=x64'

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

非常感谢您的帮助!

4

1 回答 1

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)

这告诉我您在构建的软件包(即安装目录)中需要一个 {package}/libs/{arch} 文件夹,其中 {arch} 与您的系统拱门相匹配,如 r_arch <- .Platform$r_arch

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

于 2012-12-24T23:59:03.200 回答