【问题标题】:Compiling under Rcpp11 fails, cannot find 'future'在 Rcpp11 下编译失败,找不到“未来”
【发布时间】:2014-12-15 20:55:02
【问题描述】:

我正在尝试使用 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

但是,尝试在 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++ 编译器的实际调用:

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

【问题讨论】:

  • 是的,g++ 4.4.* 对于任何有意义的 C++11 工作来说(方式)太旧了,你使用哪个 Rcpp* 变体都没有关系,因为约束来自 C++ 11 边。使用旧的 Rd Hat 盒子无论如何你都会遇到困难。
  • 从技术上讲,4.4.7 并没有那么旧,但当然 4.4.0 是在 2009 年 4 月 19 日发布的,所以到现在为止,主要版本已经有 5 年多了。它于 2012 年 3 月 13 日发布。gcc 4.7.0 是第一个完全支持 C++11 的版本,它于 2012 年 3 月 22 日发布。但由于 RedHat 对新版本比较保守,因此选择 4.7.0 版本而不是 4.4 .7 可能有点冒险,因为事情可能会在 4.4 和 4.5 之间发生变化,更不用说 4.4 到 4.7。我个人会得到 4.8.2 或 4.9.1,在本地构建并继续使用。
  • 谢谢,伙计们。遗憾的是,这个 Red Hat 机器是我部门的高性能服务器,我没有 root 访问权限来安装更新的编译器。叹息。

标签: c++ r rcpp rcpp11


【解决方案1】:

Rcpp11不编译时,通常表示编译器不是C++11编译器。 Rcpp11 的早期版本对 C++11 的含义做了一些妥协,但下一个版本不会妥协。 C++11 = C++11,未完成C++0x

C++11 和 forward 之所以如此出色,是因为所有这些部分如何组合在一起。

拥有C++11 编译器是使用Rcpp11 的代价。我认为这是一个特点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2021-12-26
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多