2014-10-20 156 views
0

我試圖使用Rcpp11綁定使用C++ 11二進制引擎蓋下編譯的R包。我已經成功地編譯和使用我的Mac上這個包(OSX 10.9.5,編譯鐺++):編譯失敗,無法找到「未來」

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是C++ 11規範的一部分。我覺得很奇怪的是,其他幾個命名空間加載成功(我們成功地使其向的Rcpp.h第50行),但future沒有。這是由於使用過時的編譯器?作爲參考,我將實際呼叫連接到克++編譯器失敗:

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帽子,無論如何你都會遇到困難。 – 2014-10-20 19:08:06

+0

從技術上講,4.4.7並不是那麼古老,但當然4.4.0於2009年4月19日發佈,所以主要版本到現在已有5年多了。它於2012年3月13日發佈。gcc 4.7.0是第一個完全支持2012年第22期Marth發佈的C++ 11的軟件。但由於RedHat對新版本保守,因此在4.4版本中選擇了4.7.0版本.7可能有點冒險,因爲事情可能會在4.4到4.5之間變化,不要介意4.4到4.7。我個人會得到4.8.2或4.9.1,在本地構建並去爲它。 – 2014-10-20 19:21:46

+0

謝謝,夥計們。不幸的是,這個Red Hat盒子是我部門的高性能服務器,而且我沒有root權限來安裝更新的編譯器。嘆。 – Wesley 2014-10-20 19:47:13

回答

1

Rcpp11不編譯,這通常意味着,編譯器是不是一個C++ 11編譯器。以前版本的Rcpp11C++11的含義上使用了一些妥協,但接下來的版本不會妥協。 C++11 = C++11,不未完成C++0x

是什麼讓C++11轉發偉大是所有這些部分是如何結合在一起的。

有一個C++11編譯器是必須付出的代價使用Rcpp11。我認爲這是一個功能。