8

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

R CMD SHLIB foo.c 

在 Windows 7 命令行中。但是什么也没发生。没有错误消息,但没有创建 dll 文件。

我所做的有什么问题?谢谢你。

4

2 回答 2

8

如果我的问题不是很清楚,我很抱歉。但是我弄清楚了如何使事情正常进行以及可能的错误。希望它对某人有用。以下是步骤:

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

    R CMD SHLIB foo.c

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

于 2013-04-13T23:20:45.530 回答
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(++) 函数,它需要一个平方根。

于 2013-04-13T21:46:49.313 回答