2016-11-21 139 views
1

我有一些C++代碼。我想用Rcpp做這個R包。Rcpp:將C++函數移植到R中,未找到'Rcpp.h'文件

下面是我在做什麼:

  1. 通過執行Rcpp.package.skeleton("myPackageName")
  2. 運行devtools::load_all()rcpp_hello_world()作品是否library(myPackageName)後創建一個包框架。它確實!
  3. 取所有C++源代碼並將其複製到/src。再次運行devtools::load_all()後,仍然可以使用rcpp_hello_world()
  4. 對於在C++源代碼中的每個函數現在居住在/src,簡單地做到這一點:

(A)在.cpp文件'

#include <Rcpp.h> 
using namespace Rcpp; 

(B)的頂部將將前每個功能void此評論

//[[Rcpp::export]] 

現在,我傻傻的想,如果我跑devtools::load_all()中,具有編譯和C++函數的代碼將可以訪問。這是不正確的。

這裏的load_all()後錯誤:

1 warning generated. 
sourcecode1.cc:2:10: fatal error: 'Rcpp.h' file not found 
#include <Rcpp.h> 
     ^
1 error generated. 
make: *** [myPackageName] Error 1 
ERROR: compilation failed for package ‘myPackageName’ 

它找不到頭文件Rcpp.h

(1)是我上面結合RCPP直接從C++代碼創建R程序包不正確的程序?這是我從書中收集的內容

(2)我該如何解決這個問題?

回答

2

你需要運行'compileAttributes()',RStudio也會爲你做。

簡而言之,每次更改或添加接口時,都需要運行此函數。

+0

@DirkEddelbuettel感謝您的迴應。 (1)在package目錄下,我運行了'library(Rcpp)','compileAttributes(pkgdir =「。」,verbose = getOption(「verbose」))'和'devtools :: load_all()'。我得到了與上面相同的錯誤。 2.這在RStudio中會更容易? – ShanZhengYang

+0

檢查您是否已更新文件RcppExports。 R和RcppExports.cpp作爲結果。接下來的重建將會反映它們。而對於什麼是值得我不使用devtools自己。 –

+0

@DirkEddelbuettel你是對的!函數在'RcppExports.R'和'RcppExports.cpp'中。所以,它是''compileAttributes()'把它們放在那裏。問題:「爲了什麼是值得我不使用devtools我自己」 然後,我將如何「加載」我的包,以便我可以使用它?也就是'library(myPackageName)'並調用函數? – ShanZhengYang