我对Rcpp
和RcppEigen
很新,可能这就是为什么我不能自己搞清楚:
我只想写一个包含Eigen库的c ++函数。为了测试它是否有效我从http://people.math.aau.dk/~sorenh/misc/Rdocs/Rcpp/RcppSHLIB.pdf获取了以下示例:
#include <Rcpp.h>
#include <RcppEigen.h>
RcppExport SEXP C_spdinv_eigen ( SEXP X_ ){
using Eigen::Map;
using Eigen::MatrixXd;
typedef Eigen::Map<Eigen::MatrixXd> MapMatd;
const MapMatd X(Rcpp::as<MapMatd>(X_));
const MatrixXd Xinv(X.inverse());
return(Rcpp::wrap(Xinv));
}
但我收到以下错误:
rcpp-test.cpp:2:23: fatal error: RcppEigen.h: No such file or directory
compilation terminated.
make: *** [rcpp-test.o] Error 1
g++ -I/usr/share/R/include -DNDEBUG -I"/usr/local/lib/R/site-library/Rcpp/include" -fpic -O3 -pipe -g -c rcpp-test.cpp -o rcpp-test.o
Error in Rcpp::sourceCpp("rcpp-test.cpp") :
Error 1 occurred building shared library.
编译只有#include <Rcpp.h>
的脚本才能正常运行。
RcppEigen.h
- 位于/usr/local/lib/R/site-library/RcppEigen/include
目录中的文件。我尝试使用RcppEigen
和R CMD INSTALL ...
安装install.package
:既没有效果。
我的seccionInfo是
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=C LC_COLLATE=C LC_MONETARY=C
[6] LC_MESSAGES=C LC_PAPER=C LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=C LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RcppEigen_0.3.2.1.1 Rcpp_0.11.1
loaded via a namespace (and not attached):
[1] Matrix_1.1-1.1 grid_3.0.2 lattice_0.20-27 tools_3.0.2
感谢您的帮助!
答案 0 :(得分:4)
您没有说 您试图编译您的函数。重要的是:
在包中,使用LinkingTo: RcppEigen
。
在与Rcpp属性一起使用的函数中,使用正确的Rcpp::depends(RcppEigen)
。
这里有很多例子,在Rcpp Gallery和其他地方。关注他们,但请遵循所有步骤。现在你有编译器告诉你RcppEigen
未知。
我的Rcpp book详细信息会在第2章中构建问题。