2014-10-20 2 views
0

Rcpp11 바인딩을 사용하여 R 패키지를 컴파일하여 C++ 11 바이너리를 사용하려고합니다.Rcpp11에서 컴파일이 실패하고 'future'를 찾을 수 없습니다.

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

그러나 시도는 g ++ 컴파일러 버전과 64 비트 레드햇 리눅스에서 컴파일 : 나는 성공적으로 컴파일 내 Mac에서이 패키지를 사용했다 (OSX 10.9.5, 컴파일러는 그 소리 ++입니다) 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 ++ 컴파일러에 실제 전화를 연결할 수 있습니다 : Rcpp11이 컴파일되지 않습니다

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이 2009 년 4 월 19 일에 릴리스되었으므로 주 릴리스는 5 년이 조금 넘었습니다. 2012 년 3 월 13 일에 릴리스되었습니다. gcc 4.7.0은 2012 년 Marth 22에서 발표 된 C++ 11을 완전히 지원 한 최초의 개발자입니다. 그러나 RedHat은 새로운 버전에 대한 보수적 인 관계로 4.4 이상 릴리스 4.7.0을 선택했습니다 .7 일이 조금 위험 할 수 있습니다. 일이 4.4에서 4.5 사이에서 바뀔 가능성이 있으므로 4.4에서 4.7까지 신경 쓰지 마십시오. 나는 개인적으로 4.8.2 또는 4.9.1을 얻을 것이고, 그것을 로컬로 구축하고 그것을 위해 갈 것이다. –

+0

고마워요. 안타깝게도이 Red Hat 상자는 저의 고성능 서버이며 새로운 컴파일러를 설치할 루트 액세스 권한이 없습니다. 한숨. – Wesley

답변

1

, 보통 컴파일러는 C++ 11 컴파일러 없음을 의미합니다. Rcpp11의 이전 버전은 C++11이 의미하는 것에 약간의 타협점을 사용했지만 다음 버전은 손상되지 않습니다. C++11 = C++11, 끝나지 않은 C++0x.

C++11이 앞으로 나아가게하는 이유는 이러한 모든 조각들이 어떻게 어울리는 지입니다.

C++11 컴파일러는 Rcpp11을 사용하는 대가로 지불해야합니다. 나는 이것을 특징으로 본다.