0

我正在尝试构建一个包含 Rcpp 和 RcppArmadillo 代码的 R 包。sourceCpp() 工作正常,一切运行顺利,但是当我尝试构建包时,我得到:“此文件需要 ISO C++ 2011 标准的编译器和库支持。此支持目前是实验性的,必须使用 -std 启用=c++11 或 -std=gnu++11 编译器选项。”

在描述文件中包含 RcppArmadillo 和 Rcpp11 似乎没有帮助(见下文)

我的描述文件包括:

Imports:
  Rcpp (>= 0.12.13),
  RcppArmadillo (>= 0.7.900.2.0),
  Rcpp11 (>=    3.1.1.0),
  data.table
LinkingTo: Rcpp, RcppArmadillo, Rcpp11

我没有包含这两个 .cpp 文件,因为它们相当长,但显然问题似乎是 C++11 语法的使用。

4

2 回答 2

4

Rcpp11不是。_ Rcpp换句话说,Rcpp11它们Rcpp是两个独立的R包,它们在RC++对象之间提供“粘合剂” 。因此,它们具有根本不同的 API。

Rcpp11从文件中删除DESCRIPTION应该可以让一切正常工作。

Imports:
  Rcpp (>= 0.12.13),
  RcppArmadillo (>= 0.7.900.2.0),
  data.table
LinkingTo: Rcpp, RcppArmadillo

要启用C++ 11,请同时使用src/Makevarssrc/Makevars.win

CXX_STD = CXX11 # Required for C++11
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) 
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

注意:后两行是RcppArmadillo. 有关使用C++-11的示例包,请参阅:https ://github.com/r-pkg-examples/rcpp-cpp11-usage

于 2019-06-25T21:35:35.567 回答
1

在Dirk 的帖子上找到了解决方案。在 Makevars 和 Makevars.win 文件中的选项

CXX_STD = CXX11

被排除在外。包括这个选项(删除'#'),它就没有问题了。

于 2019-06-25T21:38:05.733 回答