【问题标题】:Create a dll dynamic library from C in R (Windows)在 R (Windows) 中从 C 创建一个 dll 动态库
【发布时间】:2013-04-13 20:48:34
【问题描述】:

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

R CMD SHLIB foo.c 

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

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

【问题讨论】:

    标签: c r dll


    【解决方案1】:

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

    1. 安装 R(现在最新版本是 3.0.0)。确保将 R bin 文件夹添加到 PATH
    2. 安装最新版本的 Rtools Here。确保添加“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 中加载,你会得到错误消息。

    【讨论】:

    • 您也可以尝试:TDM-GCCCygwinmsysGit(仅限网络安装),但 Rtools 效果更好!
    【解决方案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(++) 函数,它需要一个平方根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2012-05-12
      相关资源
      最近更新 更多