Ошибка сборки пакета R: '-std = c ++ 11 или -std = gnu ++ 11 опции компилятора' - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать пакет R, который включает в себя код Rcpp и RcppArmadillo. sourceCpp () работает нормально, и все работает гладко, но когда я пытаюсь собрать пакет, я получаю: «Этот файл требует поддержки компилятора и библиотеки для Стандарт ISO C ++ 2011. Эта поддержка в настоящее время является экспериментальной и должна быть включен с помощью параметров компилятора -std = c ++ 11 или -std = gnu ++ 11. "

Включение RcppArmadillo и Rcpp11 в файл описания, похоже, не помогает (см. Ниже)

Мой файл описания включает в себя:

Imports:
  Rcpp (>= 0.12.13),
  RcppArmadillo (>= 0.7.900.2.0),
  Rcpp11 (>=    3.1.1.0),
  data.table
LinkingTo: Rcpp, RcppArmadillo, Rcpp11

Я не включил два файла .cpp, так как они довольно длинные, но, очевидно, проблема заключается в использовании синтаксиса C ++ 11.

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

Rcpp11 - это , а не Rcpp. Другими словами, Rcpp11 и Rcpp - это два отдельных пакета R , которые обеспечивают "склейку" между R и C ++ объектами. В результате у них принципиально разные API.

Удаление Rcpp11 из файла DESCRIPTION должно позволить всему работать.

Imports:
  Rcpp (>= 0.12.13),
  RcppArmadillo (>= 0.7.900.2.0),
  data.table
LinkingTo: Rcpp, RcppArmadillo

Для включения C ++ 11 используйте как src/Makevars, так и src/Makevars.win:

CXX_STD = CXX11 # Required for C++11
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) 
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

Примечание: Последние две строки требуются для RcppArmadillo. Для примера пакета, который использует C ++ - 11 , пожалуйста, смотрите: https://github.com/r-pkg-examples/rcpp-cpp11-usage

1 голос
/ 26 июня 2019

Нашел решение на пост Дирка . В файлах Makevars и Makevars.win опция

CXX_STD = CXX11

был закомментирован. Включите эту опцию (удалите «#»), и это не создает проблем.

...