使用dyn.load或library.dynam来调用R包中的C ++函数

时间:2011-05-06 13:58:21

标签: c++ r package

我是R的新手。我想构建一个R包,它将使用.Call()调用C ++函数。 我有一个NAMESPACE文件,带

useDynLib(mypkg)

其中mypkg也是我的c ++代码的函数名。

如果我在mypkg.R文件的开头使用这一行,它会起作用:

dyn.load("src/mypkg.so")

但我想使用library.dynam,所以在zzz.R文件中,我把

.onLoad<-function(libname, pkgname)
 {
 library.dynam("mypkg", pkgname, libname)
 }

检查包时会出错:

...
Error in .Call("mypkg", PACKAGE = "mypkg") : 
C symbol name "mypkg" not in DLL for package "mypkg".
Error : unable to load R code in package 'mypkg'
...

看起来* .so文件是在错误的地方生成的?为什么没有生成/ libs文件夹?

我想构建一个独立于os的包,有没有办法用dyn.load做到这一点?

这可能是一个非常愚蠢的问题,pkgname和libname从哪里获取输入?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您可以在CRAN上查看众多现有软件包之一(包含已编译的源代码)。

更小更简单易于理解,因此您可以例如查看digest,它使用NAMESPACE来加载从少数C源文件构建的一个共享库,并使用.Call()访问主要入口点。

然后手册当然......