尽管makevars,RCPP似乎使用了不正确的g ++标志

时间:2020-05-03 01:22:30

标签: c++ rcpp

我正在Linux机器上工作,我在〜/ .R / Makevars中创建的Makevars文件包含以下内容:

CXX = g++
CXXSTD = -std=gnu++17

我正在使用以下代码运行R 3.5.1-intel-mkl:

library(Rcpp)
library(RcppArmadillo)
sourceCpp("code.cpp",cacheDir="~/goldfish/solvers/junkdir",rebuild=T,showOutput=T,verbose=T)

我怀疑cpp文件的内容是否重要,因为该错误涉及环境问题:

code.cpp: In function ‘void polyRegression(const std::vector<int, std::allocator<int> >&, const std::vector<int, std::allocator<int> >&)’:
code.cpp:188:18: error: ‘transform_reduce’ is not a member of ‘std’

我尝试了这一行代码(感谢this answer

g++ -x c++  -E -dM -< /dev/null | grep __cplusplus

测试版本,这是输出:

#define __cplusplus 201402L

根据this answer,这可能意味着部分支持。我有点迷茫,所以我的问题是:

1)此版本的g ++不支持transform_reduce方法吗?如果没有,您可以推荐其他替代方法吗? 2)如果支持transform_reduce并且我的Makevars出现错误,或者操作系统由于某种原因无法将其拾取,那么如何强制操作系统找到它?

编辑:

根据Dirk Eddelbuettel的建议(再次感谢),我需要在Makevars中设置所有正确的变量和标志。我也读过this answer,这很有启发性,但是我不确定将C ++设置为编译为transform_reduce可以使用的版本的方法。这是我目前的标志(我认为CXXSTDCXX17STD将解决问题,但还没有解决。)

CXX = g++
CXXSTD = -std=gnu++17
CXXCPP = $(CXX) -E
CXXFLAGS = -g -O2 $(LTO)
CXXPICFLAGS = -fpic
CXX98 = g++
CXX98FLAGS = -g -O2
CXX98PICFLAGS = -fpic
CXX98STD = -std=gnu++98
CXX11 = g++
CXX11FLAGS = -g -O2
CXX11PICFLAGS = -fpic
CXX11STD = -std=gnu++11
CXX14 = g++
CXX14FLAGS = -g -O2
CXX14PICFLAGS = -fpic
CXX14STD = -std=gnu++14
CXX17 = g++
CXX17FLAGS = -g -O2
CXX17PICFLAGS = -fpic
CXX17STD = -std=gnu++17

0 个答案:

没有答案
相关问题