2011-10-12 170 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