Я работаю над linux коробкой, с файлом Makevars, который я создал в ~ / .R / 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’
Я пробовал эту строку код (спасибо этот ответ )
g++ -x c++ -E -dM -< /dev/null | grep __cplusplus
для проверки версии, и это был вывод:
#define __cplusplus 201402L
Что согласно этот ответ может означать частичную поддержку. Я немного растерялся, поэтому мои вопросы:
1) Не поддерживается ли метод transform_reduce в этой версии g ++? Если нет, можете ли вы порекомендовать какие-либо альтернативы? 2) Если transform_reduce IS поддерживается и у меня есть ошибка в моих файлах Makevars, или ОС по какой-то причине не получает ее, как заставить ОС ее найти?
РЕДАКТИРОВАТЬ:
Следуя совету Дирка Эддельбюттеля (еще раз спасибо), мне нужно установить все правильные переменные и флаги в Makevars. Я прочитал этот ответ тоже, что было поучительно, но я не уверен, что установить для C ++ для компиляции в версию для transform_reduce, чтобы функционировать. Вот мои флаги на данный момент (я думал, что CXXSTD
и CXX17STD
решат проблему, но это не так).
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