如何使用R和RCPP编译dll?

时间:2011-10-12 05:01:53

标签: c++ r mingw rcpp

我已经写了一个.cpp文件,我想把它编译成.dll用于R和RCPP。 (不使用内联包)。 我使用的是WinXP和R 2.13.2以及RCPP 0.9.7。我正在使用Rtools 2.14。

  1. 如何在minGW的搜索路径中包含Rcpp.h?我不记得我需要包含的文件是在C:\ Program Files \ R \ R-2.13.2 \ library \ Rcpp \ include中。但是,我无法添加“添加”它们到“搜索路径”。

  2. 我累了一个临时的“黑客”。我将C:\ Program Files \ R \ R-2.13.2 \ library \ Rcpp \ include的内容复制到minGW的include目录中。编译/链接过程从myfile.cpp到myfile.o,但在编译myfile.dll之前会抛出一堆错误。

  3. 我已将C:\ Program Files \ R \ R-R-2.13.2 \ bin \ i386添加到我的PATH中,并且我从WinXP命令提示符调用R CMB SHLIB myfile.cpp。

    我该怎么办?

1 个答案:

答案 0 :(得分:12)

快速点几点:

  1. MinGW的gccg++编译器的行为与gcc系列中的其他编译器一样。这意味着没有“添加到搜索路径”:您使用-I/some/dir开关添加该路径和目录。同样,-L/some/lib将该目录添加到链接器路径。

  2. 确实想要使用Makefile。我们的Rcpp包附带了很多例子;您可以查看Makefile目录中的ConvolveBenchmarks

  3. 但你真正想要的是使用所谓的“包”。我们有一个完整的小插图Rcpp-package致力于此。它可以像调用为您创建包的rcpp.package.skeleton()函数一样简单 - 并且动态库被创建为副作用。

  4. 如果这一切都太令人困惑,请先尝试熟悉inline。使用verbose=TRUE参数查看inline如何构建动态库!

  5. 最后,我们将其拼写为Rcpp,而不是RCPP。

  6. rcpp-devel邮件列表也是一个很好的帮助来源。