使用C代码构建R包,缺少dll

时间:2014-12-04 16:32:37

标签: c r dll package

我试图建立一个R包,它通过.Call调用一些C子程序。

如果我手动执行R CMD SHLIB然后dyn.load .dll文件,所有函数都正常工作。

现在,我正在使用R CMD构建构建包。

我将所有C代码与.h文件一起放在我添加的某些库中。当我运行R CMD构建NAMEPACKAGE时,一切似乎都很好,但是当我运行R CMD检查NAMEPACKAGE时,我得到以下错误:

*** arch - i386
Error in library.dynam(lib, package, package.lib) : 
  DLL 'NAMEFUNC' not found: maybe not installed for this architecture?
Error: loading failed
Execution halted
*** arch - x64
Error in library.dynam(lib, package, package.lib) : 
  DLL 'NAMEFUNC' not found: maybe not installed for this architecture?
Error: loading failed
Execution halted
ERROR: loading failed for 'i386', 'x64'

我试图在互联网上获取一些信息,我觉得我应该写一个Makevars文件,但老实说,我花了很多时间在写作R扩展教程(1.2.1)和我'我真的很难理解我需要做什么。 有人可以向我解释如何解决问题吗?考虑我想将我的包提交给CRAN。感谢。

1 个答案:

答案 0 :(得分:1)

我刚刚发现了问题所在!它(像往常一样)是一个相当愚蠢的事情,我不知道即使你用某个名称调用某个函数,关联的dll也会自动调用包的名称而不是函数本身,就像它一样当你通过R CMD SHLIB创建你的dll时,会发生这种情况。 因此,在NAMESPACE中我不得不添加useDynLib(NAMEOFPACKAGE)而不是useDynLib(NAMEOFFUNCTION)。