我试图使用Rcpp11绑定编译R包,以便在引擎盖下使用C ++ 11二进制文件。我在Mac上成功编译并使用了这个软件包(OSX 10.9.5,编译器是clang ++):
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
然而,尝试使用g ++编译器版本4.4.7-4在64位Red Hat Linux下编译失败,因为找不到名为future
的头文件或库或命名空间:
In file included from RcppExports.cpp:4:
/path/to/R-libs/3.1/Rcpp11/include/Rcpp.h:50:18: error: future: No such file or directory
据我所知,future
是C ++ 11规范的一部分。我发现奇怪的是其他几个名称空间被成功加载(我们成功地将其加到Rcpp.h的第50行),但future
没有。这是因为使用了过时的编译器吗?作为参考,我将实际调用附加到失败的g ++编译器:
g++ -m64 -std=c++0x -I/usr/include/R -DNDEBUG -I/usr/local/include -I"/path/to/R-libs/3.1/Rcpp11/include" -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -c RcppExports.cpp -o RcppExports.o
答案 0 :(得分:1)
当Rcpp11
无法编译时,通常意味着编译器不是C ++ 11编译器。早期版本的Rcpp11
对C++11
的含义有所妥协,但下一版本不会妥协。 C++11
= C++11
,未完成C++0x
。
使C++11
和前进的伟大之处在于所有这些部分如何融合在一起。
使用C++11
编译器是使用Rcpp11
时要付出的代价。我认为这是一个功能。