2011-10-12 176 views
3

我已经写了一个.cpp文件,我想将它编译为一个用于R和RCPP的.dll。 (不使用内联包)。 我使用WinXP和R 2.13.2和RCPP 0.9.7。我正在使用Rtools 2.14。如何使用R和RCPP编译dll?

  1. 怎样包括Rcpp.h在MinGW的搜索路径?我不了解我需要包含的文件位于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之前会抛出一堆错误。

我已经加入C:\ Program Files文件\ r \ R-2.13.2 \ Bin \ I386文件到我的道路,我呼吁从WinXP的命令提示符[R CMB SHLIB MYFILE.CPP。

我该怎么做?

回答

11

几个快速点:

  1. 从MinGW的的gccg++编译器使用起来就像是从gcc家庭其他编译器。这意味着没有“添加到搜索路径”:您使用-I/some/dir开关添加该路径和目录。同样,-L/some/lib将该目录添加到链接器路径。

  2. 真的想使用Makefile。我们的Rcpp软件包带有很多示例;您可以查看ConvolveBenchmarks目录中的Makefile

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

  4. 如果这一切过于混淆,请先尝试熟悉inline。使用verbose=TRUE参数来查看inline如何构建动态库!

  5. 最后,我们拼写它Rcpp,而不是RCPP。

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

+0

谢谢您的及时答复。试图从您的统计软件论文期刊中复制'inline'示例时遇到错误。 我正在运行以下代码: src < - ' \t \t Rcpp :: NumericVector xa(a); \t \t Rcpp :: NumericVector xb(b); \t \t int n_xa = xa.size(),n_xb = xb。尺寸(); \t \t \t \t Rcpp :: NumericVector xab(n_xa + n_xb - 1); \t \t的for(int i = 0;我 power

+0

我得到以下错误: 编译参数: Ç :/R/R-2.13.2/bin/i386/R CMD SHLIB file99a82.cpp 2> file99a82.cpp.err.txt 错误(s)在编译期间:源代码错误或编译器配置错误! 编译错误(f,code,language = language,verbose = verbose): 编译错误,函数/方法未创建! 此外:警告信息: 运行命令'C:/R/R-2.13.2/bin/i386/R CMD SHLIB file99a82.cpp 2> file99a82.cpp.err.txt'has status 1 – power

+0

我在哪里可以找到这'file99a82.cpp.err.txt'来读取实际的错误信息? – power