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

4
我遇到了一个问题,我正在编写一个R包并尝试使用预编译的共享库进行构建。让我简要描述一下问题:
  • 这个包(我们称之为)依赖于已经编译好的共享库,我无法在构建R包时实时编译它。
  • 库已经在Windows下的x64机器上编译并且可以通过在R中加载。
  • 包含所需文件的包,其中指定了。文件中也指定了包含指令的函数<.onLoad>。
  • 使用通常的命令使用构建R包,然后我添加了一个目录,将保存在其中。
  • 当我尝试使用在R中加载该包时,我得到以下错误消息:
    Error: package 'mypack' is not installed for 'arch=x64'
这让我感到困惑。为什么共享库可以在R中顺利加载,但是当我使用它构建包时却收到这个奇怪的错误消息呢?
非常感谢您的帮助!
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代码?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接