我想从C源代码创建一个dll动态库,以便我可以在R中加载和使用它。我现在正在使用
R CMD SHLIB foo.c
在Windows 7命令行中。但什么都没发生。没有错误消息但没有创建dll文件。
我做了什么有什么问题?谢谢。
答案 0 :(得分:7)
如果我的问题不是很明确,我很抱歉。但我想出了如何让事情发生变化和可能的错误。希望它对某人有用。以下是步骤:
在Windows命令窗口中,键入
R CMD SHLIB foo.c
然后你应该有一个foo.dll文件,然后你可以在R中调用它。注意,在64位R下创建的foo.dll只能加载到64位R。如果你尝试加载32位R,你会得到错误消息。
答案 1 :(得分:2)
“你什么都没发生”究竟是什么意思?你的道路上有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(++)函数,它取平方根。