R cpp использует неправильный флаг g ++ несмотря на makevars - PullRequest
1 голос
/ 03 мая 2020

Я работаю над 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
...