最近、Amazon から 2013 Rcpp の本をダウンロードして、R コードで C++ をより適切に使用する方法を学びました。最初のフィボナッチ再帰関数とラッパーを使用して最初のコンパイル例を試して、それができるかどうかを確認しています。私は最新のRでUbuntuを使用しています。
まず私の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 ディレクティブが必要かもしれないので、もう一度実行しますが、今回#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 フラグが原因だと思います。
ありがとう、ベン。