首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R包生成错误:'-std=c++11或-std=gnu++11编译器选项‘

R包生成错误:'-std=c++11或-std=gnu++11编译器选项‘
EN

Stack Overflow用户
提问于 2019-06-26 05:21:30
回答 2查看 1.2K关注 0票数 0

我正在尝试构建一个R包,其中包含Rcpp和RcppArmadillo代码。sourceCpp()运行得很好,一切都运行得很顺利,但是当我尝试构建包时,我得到的结果是:“这个文件需要对C++ 2011标准的编译器和库支持。这种支持目前还处于实验阶段,必须使用-std=c++11或-std=gnu++11编译器选项来启用。”

在描述文件中包含RcppArmadillo和Rcpp11似乎没有什么帮助(如下所示)

我的描述文件包括:

代码语言:javascript
复制
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语法的使用。

EN

回答 2

Stack Overflow用户

发布于 2019-06-26 05:35:36

Rcpp11 is not Rcpp。换句话说,Rcpp11Rcpp是两个独立的R包,它们提供了R和C++对象之间的“粘合剂”。因此,它们拥有完全不同的API。

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

代码语言:javascript
复制
Imports:
  Rcpp (>= 0.12.13),
  RcppArmadillo (>= 0.7.900.2.0),
  data.table
LinkingTo: Rcpp, RcppArmadillo

src/Makevarssrc/Makevars.win中启用C++ 11

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2019-06-26 05:38:06

Dirk's post上找到了解决方案。在Makevars和Makevars.win文件中,选项

代码语言:javascript
复制
CXX_STD = CXX11

这是一种过时的评论。包括此选项(删除'#'),它不会产生任何问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56762172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档