加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:37:32 所属栏目:Windows 来源:网络整理
导读:我正在编写一个R包的问题,??我正在编写并尝试使用预编译的共享库进行构建.让我试着简要描述一下这个问题: 这个包(让我们称之为mypack)依赖于已编译的共享库mylib.dll,并且在构建R包时无法动态编译. 库mylib.dll已在Windows下的x64机器上编译,可以使用dyn.lo
我正在编写一个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中指定.
>使用常用命令Rcmd INSTALL使用Rtools构建R包mypack,然后添加一个目录libs,我保存mylib.dll.
>当我尝试使用库(mypack)在R中加载包时,收到以下错误消息:
错误:’arch = x64’没有安装软件包’mypack’

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

非常感谢您的帮助!

解决方法

该错误消息来自库中的此代码:

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}与你的系统的arch相匹配,由r_arch< - .Platform $r_arch给出 我猜你的构建未能正确地做到这一点.您的源代码中是否有任何C代码?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读