自更新到R 3.4.0以来,C ++ 11的Rcpp插件无法正常工作

时间:2017-04-26 15:01:25

标签: r c++11 rcpp

由于我将R更新到新版本3.4.0,启用C ++ 11的Rcpp插件似乎无法正常工作。 (请注意,这是与此处报告的不同情况http://r.789695.n4.nabble.com/R-3-4-has-broken-C-11-support-td4732692.html

我有需要C ++ 11标准的C ++文件,我使用命令Rcpp::sourceCpp(foo.cpp)通过Rcpp在R中编译。 R默认标准是C ++ 98但我可以通过在我的C ++文件中添加以下命令来改变它 // [[Rcpp::plugins("cpp11")]]

这不再适用于新版本的R 3.4.0,我的编译器使用默认标准(C ++ 98)而不是C ++ 11,尽管有插件。它曾用于以前版本的R。

我目前的解决方案是为我的R会话设置一个环境变量: Sys.setenv("PKG_CXXFLAGS"="-std=c++11")

这是我在R中使用的配置:

sessionInfo()
R version 3.4.0 (2017-04-21) Platform: x86_64-suse-linux-gnu (64-bit) Running under: openSUSE Leap 42.2
Matrix products: default BLAS: /usr/lib64/R/lib/libRblas.so LAPACK: /usr/lib64/R/lib/libRlapack.so locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages: [1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached): [1] compiler_3.4.0 rsconnect_0.4.3 tools_3.4.0

我使用Rcpp软件包版本0.12.1.0。 我的编译器如下:

~$ g++ --version | head -n1
g++ (SUSE Linux) 4.8.5 

我错过了什么吗?还有其他人遇到过同样的问题吗?

2 个答案:

答案 0 :(得分:4)

昨天在GitHub issue tracker in #683报告了这一点,并且已经在pull request #684已经关闭,现已合并。

因此,只需升级到主分支,或立即手动设置env.var。这是一个上游R更改,打破了这一点,没有提供向后兼容性。

答案 1 :(得分:1)

根据Dirk Eddelbuettel 回答 - 只需插入

# R code
Sys.setenv("USE_CXX11" = "yes")
sourceCpp("code.cpp")

# C++ code
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]                                                                       
double myhypot(double x, double y) {
return std::hypot(x,y);

}

......它确实有用!