在R 3.1.2中构建包有多个第三方DLL的错误

时间:2015-01-08 01:22:18

标签: r dll shiny

一位同事将超过一千个S函数和Fortran子例程移植到R.本机R函数包含在5个.RData文件中,Fortran子例程包含在2个.dll文件中。

我可以使用

将这些文件加载​​到R工作区
for (i in 1:5){    load(list.files()[grep("RData",strsplit(list.files(),"\\W+"))][i]) } 
for (i in 1:2){dyn.load(list.files()[grep("dll"  ,strsplit(list.files(),"\\W+"))][i]) }

经过一些故障排除后,我知道R代码和Fortran子程序之间的关系已经由原作者很好地建立起来了。

现在我想从这些文件创建一个包,因为我无法用这些dll文件部署我的ioslides_presentations,因为shinyapps.io是用Linux构建的。这是我第一次尝试创建R包,我不打算将它发布到CRAN,我只对生成我和我的学生可以加载的本地zip文件感兴趣。

我的过程

使用上面的代码在工作区中加载函数后,我运行了成功创建“package_1.0.tar.gz”的package.skeletonsystem("R CMD build package")。完成DESCRIPTION文件后,我将.dll文件放在src子目录中,并将useDynLib(DLL1), useDynLib(DLL2)包含在NAMESPACE文件中。

但是,当我运行system("R CMD INSTALL build package_1.0.tar.gz")时,我收到以下错误:

library.dynam(lib,package,package.lib)中的错误:   未找到DLL'package.dll':可能没有为此架构安装? 错误:加载失败 执行暂停

我花了很多时间阅读Hadley Wickham的“Writing R Extensions”,“Advanced R”和devtools文档。即使这样,我也无法解密useDynLib.onLoadExportCallMakevars,这些应该用于预编译的Fortran代码。

我真的不想解析所有这些函数来找到哪些需要导出规则,如果我不需要。我很感激任何帮助这些.dll文件加载,所以我可以完成创建这个包

提前致谢, 杰森

0 个答案:

没有答案