【问题标题】:Building an R package with a pre-compiled shared library使用预编译的共享库构建 R 包
【发布时间】:2012-12-24 17:18:05
【问题描述】:

我正在编写并尝试使用预编译的共享库构建的 R 包遇到问题。让我试着简单描述一下这个问题:

  • 这个包(我们称之为mypack)依赖于一个已经编译的共享库mylib.dll,我在构建R包时无法即时编译。
  • mylib.dll 已在Windows 下的x64 机器上编译,可以使用dyn.load 在R 中加载。
  • 包中包含所需的文件NAMESPACE,其中指定了useDynLib(mylib.dll)。包含指令library.dynam('mylib.dll', pkg, lib) 的函数.onLoad 也在文件zzz.R 中指定。
  • R 包mypack 是使用常用命令Rcmd INSTALL 使用Rtools 构建的,然后我添加一个目录libs 我保存mylib.dll
  • 当我尝试使用library(mypack) 在 R 中加载包时,我收到以下错误消息:
    Error: package 'mypack' is not installed for 'arch=x64'

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

非常感谢您的帮助!

【问题讨论】:

    标签: r dll package shared-libraries


    【解决方案1】:

    该错误消息来自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 代码吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2016-10-02
      相关资源
      最近更新 更多