我最近从 amazon 下载了 2013 Rcpp 书,以了解如何更好地将 C++ 与我的 R 代码一起使用,我正在尝试使用第一个斐波那契递归函数和包装器的第一个编译示例,看看我是否能做到。我在 Ubuntu 上使用最新的 R。
首先是我的 C++:
/* Cpp based recurive function */
int fibonacci(const int x){
if(x == 0) return(0);
if(x == 1) return(1);
return(fibonacci(x - 1) + fibonacci(x - 2));
}
/* Wrapper */
extern "C" SEXP fibWrapper(SEXP xs) {
int x = Rcpp::as<int>(xs);
int fib = fibonacci(x);
return(Rcpp::wrap(fib));
}
然后我启动 sh 并输入:
PKG_CXXFLAGS=`Rscript -e 'Rcpp:::CxxFlags()'`
PKG_LIBS=`Rscript -e 'Rcpp:::LdFlags()'`
R CMD SHLIB Fibonacci.cpp
但我得到:
g++ -I/usr/share/R/include -DNDEBUG -fpic -O3 -pipe -g -c Fibonacci.cpp -o Fibonacci.o
Fibbonacci.cpp:10:12: error: 'SEXP' does not name a type
make: *** [Fibonacci.o] Error 1
我想也许我需要在我的 C++ 代码中包含指令,所以我再做一次,但这次#include<Rcpp.h>
在 C++ 文件的顶部,并在 sh 中再次执行相同的命令,但仍然没有乐趣:
g++ -I/usr/share/R/include -DNDEBUG -fpic -O3 -pipe -g -c Fibonacci.cpp -o Fibonacci.o
Fibonacci.cpp:1:18: fatal error: Rcpp.h: No such file or directory
compilation terminated.
make: *** [Fibbonacci.o] Error 1
我做错了什么?如果我查询我在 sh 中设置的值:
$PKG_CXXFLAGS
sh: 9: -I/local/yrq12edu/R/x86_64-pc-linux-gnu-library/3.0/Rcpp/include: not found
$PKG_LIBS
sh: 10: -L/local/yrq12edu/R/x86_64-pc-linux-gnu-library/3.0/Rcpp/lib: not found
但我认为找不到消息只是因为 -L 标志,因为如果我 cd 到目录,文件就在那里。
谢谢,本。