【发布时间】:2013-04-13 20:48:34
【问题描述】:
我想从 C 源代码创建一个 dll 动态库,以便我可以在 R 中加载和使用它。我现在正在使用
R CMD SHLIB foo.c
在 Windows 7 命令行中。但是什么也没发生。没有错误消息,但没有创建 dll 文件。
我所做的有什么问题?谢谢。
【问题讨论】:
我想从 C 源代码创建一个 dll 动态库,以便我可以在 R 中加载和使用它。我现在正在使用
R CMD SHLIB foo.c
在 Windows 7 命令行中。但是什么也没发生。没有错误消息,但没有创建 dll 文件。
我所做的有什么问题?谢谢。
【问题讨论】:
如果我的问题不是很清楚,我很抱歉。但是我弄清楚了如何使事情正常进行以及可能的错误。希望它对某人有用。步骤如下:
在 Windows 命令窗口中,键入
R CMD SHLIB foo.c
那么你应该有一个 foo.dll 文件然后你可以在 R 中调用它。注意在 64bits R 下创建的 foo.dll 只能加载到 64bits R 中。如果你尝试在 32bits R 中加载,你会得到错误消息。
“什么都没发生”到底是什么意思? R 在你的路上吗?
R --version 揭示了什么? R CMD config CC 和 R 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(++) 函数,它需要一个平方根。
【讨论】: