我最近下載了2013 RCPP書斷亞馬遜學習如何更好地使用C++和我的R代碼裏面,我想用第一斐波那契的遞歸函數和包裝的第一個編譯例子,看看我能做到它。我在Ubuntu了最新的R.RCPP一次編譯麻煩
首先我的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++代碼中的指令,所以我再次執行它,但是這次在C++文件的頂部有#include<Rcpp.h>
,並再次做同樣的命令,但仍然沒有快樂:
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標誌,因爲這些文件存在,如果我到該目錄。
感謝, 奔。
我對此並不熟悉,大概是這樣的:'Rcpp ::: SHLIB(「fibbonacci.cpp」)'在包含cpp文件的目錄中? – Ward9250
剛剛嘗試過使用Rcpp ::: SHLIB,因爲您和本博客的建議是這樣的:http://www.computerbastard.com/rcpp-c-compilation-trick/我收到以下內容:'$ Rscript -e「 Rcpp ::: SHLIB('fibbonacci.cpp')「 make:***目標'fibbonacci.o'沒有規則,需要'fibbonacci.so'。停止' – Ward9250
對於它的價值,我完全不同意Rcpp :: SHLIB的建議。它可能在這裏被刪除。 –