由于我将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
我错过了什么吗?还有其他人遇到过同样的问题吗?
答案 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);
}
......它确实有用!