我如何用R和RCPP编译一个dll

How do I compile a dll with R and RCPP?

本文关键字:一个 dll 编译 何用 RCPP      更新时间:2023-10-16

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

  1. 如何在minGW的搜索路径中包含rcp .h ?我知道我需要包含的文件在C:Program FilesRR-2.13.2libraryRcppinclude.但是,我无法将它们"添加"到"搜索路径"。

  2. 我累了一个临时的"hack"。我将C:Program FilesRR-2.13.2libraryRcppinclude的内容复制到minGW的include目录中。编译/链接过程从myfile.cpp到myfile。

  3. 在编译myfile.dll之前会抛出一堆错误。

我已经将C:Program FilesRR-2.13.2bini386添加到我的PATH中,并且我正在从WinXP命令提示符调用R CMB SHLIB myfile.cpp。

我该怎么做?

几点要点:

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

  2. 真的想要使用Makefile。我们的Rcpp包附带了许多示例;你可以查看ConvolveBenchmarks目录下的Makefile

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

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

  5. 最后,我们把它写成Rcpp,而不是Rcpp。

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