Сбой компиляции под Rcpp11, не может найти «будущее»

0

Я пытаюсь скомпилировать пакет R с использованием привязок Rcpp11 для использования двоичного кода С++ 11 под капотом. Я успешно скомпилировал и использовал этот пакет на своем Mac (OSX 10.9.5, компилятор clang++):

Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn) Target: x86_64-apple-darwin13.4.0 Thread model: posix

Однако попытка скомпилировать под 64-разрядной версией Red Hat Linux с компилятором g++ версии 4.4.7-4 не удалась, потому что заголовок или библиотека или пространство имен, называемое future не могут быть найдены:

In file included from RcppExports.cpp:4: /path/to/R-libs/3.1/Rcpp11/include/Rcpp.h:50:18: error: future: No such file or directory

Насколько я знаю, future является частью спецификации С++ 11. Мне показалось странным, что несколько других пространств имен успешно загружены (мы успешно переходим к 50-й строке Rcpp.h), но в future этого нет. Это связано с использованием устаревшего компилятора? Для справки я приложу фактический вызов компилятору g++, который не выполняется:

g++ -m64 -std=c++0x -I/usr/include/R -DNDEBUG -I/usr/local/include -I"/path/to/R-libs/3.1/Rcpp11/include" -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -c RcppExports.cpp -o RcppExports.o

  • 3
    Да, g ++ 4.4. * (Кстати) слишком стар для любой значимой работы C ++ 11, и не будет иметь значения, какой вариант Rcpp * вы используете в качестве ограничения, исходящего от C ++ 11. Со старой коробкой Rd Hat у вас будут трудности, несмотря ни на что.
  • 0
    Технически, 4.4.7 не так уж и стар, но, конечно, 4.4.0 был выпущен 19 апреля 2009 года, поэтому основной версии уже более 5 лет. Он был выпущен 13 марта 2012 года. Gcc 4.7.0 является первым, кто полностью поддерживает C ++ 11, который был выпущен 22 марта 2012 года. Но поскольку RedHat консервативно относится к новым версиям, выбрав выпуск 4.7.0 вместо 4.4 .7, вероятно, немного рискованно, так как вещи могут измениться между 4.4 и 4.5, не говоря уже о 4.4 до 4.7. Я лично получил бы 4.8.2 или 4.9.1, собрал бы это локально и пошел бы для этого.
Показать ещё 1 комментарий
Теги:
rcpp
rcpp11

1 ответ

1
Лучший ответ

Когда Rcpp11 не компилируется, обычно это означает, что компилятор не является компилятором С++ 11. Предыдущие версии Rcpp11 использовали некоторый компромисс в отношении того, что означает C++11, но следующие версии не будут компрометировать. C++11= C++11, а не незавершенный C++0x.

Что делает C++11 и вперед великим, как все эти части подходят друг другу.

Наличие компилятора C++11 - это цена за использование Rcpp11. Я вижу это как функцию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню