2016-11-21 154 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