我想从 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(++) 函数,它需要一个平方根。