Я пытаюсь скомпилировать пакет 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
Когда Rcpp11
не компилируется, обычно это означает, что компилятор не является компилятором С++ 11. Предыдущие версии Rcpp11
использовали некоторый компромисс в отношении того, что означает C++11
, но следующие версии не будут компрометировать. C++11
= C++11
, а не незавершенный C++0x
.
Что делает C++11
и вперед великим, как все эти части подходят друг другу.
Наличие компилятора C++11
- это цена за использование Rcpp11
. Я вижу это как функцию.