我正在尝试构建一个包括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语法。
Rcpp11
是不是 Rcpp
。以另一种方式说,Rcpp11
和Rcpp
是两个单独的 r 软件包,它们在 r 和 r 和 c 对象之间提供了"胶水"。结果,它们具有根本不同的API。
从DESCRIPTION
文件中删除Rcpp11
应该允许所有操作。
Imports:
Rcpp (>= 0.12.13),
RcppArmadillo (>= 0.7.900.2.0),
data.table
LinkingTo: Rcpp, RcppArmadillo
启用 c 11 在src/Makevars
和src/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
在德克的帖子上找到了解决方案。在makevars和makevars.win文件中
CXX_STD = CXX11
被淘汰。包含此选项(删除'#'(,并且没有问题。