10

システム仕様:

  • OS - Mac OS X 10.6.8 (Snow Leopard)
  • g++ - Macports gcc 4.8.1_2+ユニバーサル
  • R -2.15.3
  • Rcpp - 0.10.3

R で (Rcpp を介して) C++11 を使用する関数をコンパイルしようとすると、エラーが発生し続けます - 何らかの理由で、g++ が-std=c++11オプションを認識しません。

この例は、Rcpp ヘルプ ファイルから取得したものです (C++11 に固有のものは含まれていませんが、私の問題を示すことができます)。私が実行しようとすると:

require( Rcpp )
Sys.setenv( "PKG_CXXFLAGS"="-std=c++11" )
cppFunction(plugins=c("cpp11"), '
int useCpp11() {
    int x = 10;
    return x;
}')

私は得る:

cc1plus: error: unrecognized command line option "-std=c++11"
make: *** [file61239328ae6.o] Error 1
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -I/usr/local/include  -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -std=c++11  -fPIC  -g -O2  -c file61239328ae6.cpp -o file61239328ae6.o 
Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput,  : 
  Error 1 occurred building shared library.

同時に、この関数を bash から直接コンパイルできます。このコードがuseCpp11.cppファイル内にある場合、これは問題なく実行されます。

g++ useCpp11.cpp -std=c++11

確かに、私は何か間違ったことをしていますが、それが何であるかを理解することはできません. gcc 4.8 は bash のデフォルト コンパイラとして設定されており、Rcpp はこれまで問題なく動作していました。どのバージョンの g++ を使用するかを R に伝えていないのではないかと思います。

4

3 に答える 3

12

Kevin Ushley はまったくそのとおりです。適切なコンパイラが使用されていることを確認する最も簡単な方法は、Makevarsファイルを使用することです。私の場合、次のように追加しました。

CXX = g++-4.8.1
PKG_CXXFLAGS = -std=c++11

これは私が見逃していたものです - そしてそれはその後すべてうまくいきました。これは、パッケージをコンパイルしている場合に機能します。

于 2013-08-27T05:19:46.077 に答える