2014-10-20 143 views
0

我试图使用Rcpp11绑定使用C++ 11二进制引擎盖下编译的R包。我已经成功地编译和使用我的Mac上这个包(OSX 10.9.5,编译铛++):编译失败,无法找到“未来”

Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn) Target: x86_64-apple-darwin13.4.0 Thread model: posix

然而,试图在64位的Red Hat Linux编译g ++编译器版本4.4.7-4失败,因为称为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++ -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

+3

是,G ++ 4.4。*是(方式)太老了任何有意义的C++ 11的工作,都不会有问题,其RCPP *您作为约束使用变种来自于C++ 11的一面。有了一个旧的Rd Hat帽子,无论如何你都会遇到困难。 – 2014-10-20 19:08:06

+0

从技术上讲,4.4.7并不是那么古老,但当然4.4.0于2009年4月19日发布,所以主要版本到现在已有5年多了。它于2012年3月13日发布。gcc 4.7.0是第一个完全支持2012年第22期Marth发布的C++ 11的软件。但由于RedHat对新版本保守,因此在4.4版本中选择了4.7.0版本.7可能有点冒险,因为事情可能会在4.4到4.5之间变化,不要介意4.4到4.7。我个人会得到4.8.2或4.9.1,在本地构建并去为它。 – 2014-10-20 19:21:46

+0

谢谢,伙计们。不幸的是,这个Red Hat盒子是我部门的高性能服务器,而且我没有root权限来安装更新的编译器。叹。 – Wesley 2014-10-20 19:47:13

回答

1

Rcpp11不编译,这通常意味着,编译器是不是一个C++ 11编译器。以前版本的Rcpp11C++11的含义上使用了一些妥协,但接下来的版本不会妥协。 C++11 = C++11,不未完成C++0x

是什么让C++11转发伟大是所有这些部分是如何结合在一起的。

有一个C++11编译器是必须付出的代价使用Rcpp11。我认为这是一个功能。