编译g++的Rcpp库时出错:找不到Rcp.h



我正在学习Hadley关于高级R中Rcpp的章节,无法理解使用Rcpp将C++函数调用到R中的一些含义。

特别是,为什么C++文件包含指令:

#include <Rcpp.h>
using namespace Rcpp;

当像往常一样使用g++编译这些文件时,将导致Rcpp.h not found错误,而不涉及R。

Rcpp.h是否意味着只能从R调用,例如使用sourceCpp?注意,我想为仅C++的程序以及使用Rcpp的R包维护相同的C++文件,但之前的错误让我怀疑这是否可能。我是不是错过了什么?

谢谢

附录

这是书中的C++文件示例。运行Rcpp::sourceCpp("example.cpp")时效果很好,但如果从终端使用g++ -o example example.cpp,则会导致上述编译错误(添加main并不能解决此问题(。g++版本为10.1.0。

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double meanC(NumericVector x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
}
/*** R
library(microbenchmark)
x <- runif(1e5)
microbenchmark(
mean(x),
meanC(x)
)
*/

这是您理解中的一个错误。

如果使用g++ -o example example.cpp

据我所知,没有R文档表明你可以做到这一点。如果你从我们许多人建议的地方开始,即R副本附带的书写R扩展手册,你会看到等效的命令是

R CMD COMPILE somefile.cpp
R CMD SHLIB somefile.cpp

这些不考虑Rcpp的额外需求。这实际上变得很复杂。

但手工完成这一切是一种很好的学习体验,所以我的一些老工作室也这样做,我关于Rcpp的书也是如此。

也就是说,没有人建议在真正的工作中这样做。坚持小插曲Rcpp简介中显示的内容,也许还有Rcpp属性。

最新更新