从C中的R创建一个dll动态库(Windows)

时间:2013-04-13 20:48:35

标签: c r dll

我想从C源代码创建一个dll动态库,以便我可以在R中加载和使用它。我现在正在使用

R CMD SHLIB foo.c 
在Windows 7命令行中

。但什么都没发生。没有错误消息但没有创建dll文件。

我做了什么有什么问题?谢谢。

2 个答案:

答案 0 :(得分:7)

如果我的问题不是很明确,我很抱歉。但我想出了如何让事情发生变化和可能的错误。希望它对某人有用。以下是步骤:

  1. 安装R(最新版本现为3.0.0)。确保将R bin文件夹添加到PATH
  2. 安装最新版本的Rtools Here。确保添加“c:\ Rtools \ bin; c:\ Rtools \ gcc-4.6.3 \ bin;”致PATH
  3. 编写保存在foo.c中的C代码
  4. 在Windows命令窗口中,键入

    R CMD SHLIB foo.c

  5. 然后你应该有一个foo.dll文件,然后你可以在R中调用它。注意,在64位R下创建的foo.dll只能加载到64位R。如果你尝试加载32位R,你会得到错误消息。

答案 1 :(得分:2)

“你什么都没发生”究竟是什么意思?你的道路上有R吗?

R --version揭示了什么? R CMD config CCR CMD config CFLAGS怎么样?

最后,如果您安装了Rcpp(并且您的工具链是正确的,包括PATH设置和所有其他设置),那么您可以随时执行操作

R> library(Rcpp)
R> cppFunction('double foo(double x) { return std::sqrt(x); }')
R> foo(4)
[1] 2
R> foo(4.2)
[1] 2.04939
R> unclass(foo)
function (x) 
.Primitive(".Call")(<pointer: 0x7f251ba76530>, x)
R> 

这里我们使用cppFunction()(以及Rcpp中的一些技巧)来编译,链接和加载 一个简单的(并且相当无用的......)C(++)函数,它取平方根。

相关问题