2014-01-18 1 views
2

OSX 10.9.1의 명령 줄 도구로 최근 C++ 11 및 Xcode 5로 이동하고 Homebrew를 사용하여 부스트 1.55를 설치하고 컴파일러를 변경했습니다. g ++에서 clang ++ (이 게시물에 언급 된대로 : Error when with Xcode 5.0 and Rcpp). R에서 실행될 때 컴파일러는 고정 Rcpp를 변경합니다.하지만 RInside 예제를 컴파일하는 데 문제가 있습니다.OS X에서 clang ++을 사용하여 빌드 예제를 빌드합니다. Mavericks가 링크시 STL 표준 라이브러리를 찾을 수 없습니다.

RInside를 다시 다운로드하고 tar의 압축을 풀고 examples/standard 디렉토리로 이동하여 make cleanmake all을 작성했습니다. 모든 STL이이 디렉토리에서 연결되지 않은 것 같습니다. Makefile의 적절한 STL에 RInside 링크를 만드는 방법은 무엇입니까?

Netbeans의 STL을 별도의 프로젝트에서 사용하고 clang ++을 사용하는 건물이 거기에서 작동합니다. 그러나 Netbeans에서 RInside 프로젝트를 시도 할 때 동일한 문제가 발생합니다 : Undefined symbols for architecture x86_64. 64 비트 버전의 STL이나 RInside를 어디에서 다운로드해야합니까?

아직 어딘가에서 설정을 변경하거나 변경해야 할 필요가 있습니까? 잘못된 패키지를 다운로드 했습니까? 예를 들어 변경해야 할 예제가있는 Makefile의 설정입니까?

clang++ -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/RInside/include -mtune=native -g -O2 -Wall -pedantic -Wconversion -Wall -I/usr/local/include rinside_callbacks0.cpp -F/Library/Frameworks/R.framework/.. -framework R -L/Library/Frameworks/R.framework/Resources/lib -lRblas -L/Library/Frameworks/R.framework/Resources/lib -lRlapack /Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/lib/libRcpp.a /Library/Frameworks/R.framework/Versions/3.0/Resources/library/RInside/lib/libRInside.a -o rinside_callbacks0 

출력의 시작 : 여기

make all에서 첫 번째 전화입니다 내가 제안

ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+0

내가 그냥 Rcpp11 프로젝트가났습니다. 이것은 Rcpp와 RInside가 C++ 11과 잘 작동하지 않는다는 것을 의미합니까?Netbeans에서'--std = C++ 98'을 설정할 때도 같은 오류가 발생합니다. Xcode를 다운 그레이드하려고합니다. –

+1

아니요. Rcpp는 R 3.1.0이 릴리스 C + 11을 사용할 때까지 CRAN이이를 허용하지 않기 때문에/할 수 없습니다. 그래서 Rcpp에서 우리의 그것을 사용하는 것은 전적으로 옵션입니다 - 그러나 Rcpp 갤러리에서 Rcpp와 C++ 11의 게시물 몇 개를 봅니다 (http://gallery.rcpp.org/tags/c++11 /). 우리는 심지어 C++ 11을 요구에 따라 돌릴 수있는 속성을 가지고 있습니다. C++ 11 코드를 CRAN에 아직 업로드하지 마십시오. –

답변

1

OS Net 10.9.1에서 Xcode 4.6.3으로 다운 그레이드 한 다음 Netbeans의 설정을 변경하지 않은 clang ++ 및 C++ 11을 사용하여 Netbeans에서 작동하는 예제를 얻었습니다. 또한 g ++ (또는 clang ++)에서 C++ 98을 사용하여 작업했습니다. Xcode 5의 기본 라이브러리는 libc++ (LLVM C++ 표준 라이브러리 (C++ 11 지원)) 이었지만이 링크를 사용하려면 libstdc++ (이전 Xcode 버전의 경우 기본 라이브러리 - GNU C++ 표준 라이브러리)이 필요했습니다. 그것을 ~/.R/Makevars 파일 CXXFLAGS="-stdlib=libstdc++ -std=c++11 -mtune=native -g -O3 -Wall -pedantic -Wconversion"과 함께 변경하고 clang++ 변경과 함께 나는 예제를 만들었습니다. Xcode 5로 다시 업그레이드하고 Netbeans에서 동일한 오류가 발생하지만 샘플 (현재는 libstdc++ 플래그로 인해 생성 됨)에서 동작을 확인하여 동작을 확인했습니다. Netbeans에서 추가 플래그로 -stdlib=libstdc++을 추가하면 다시 빌드됩니다.

다른 사람들이 예제를 작성하는 데 문제가 발생할 경우를 대비하여 fyi와 마찬가지입니다. 넷빈즈에서 컴파일 및 링크 단계는 다음과 같습니다

"/Applications/Xcode.app/Contents/Developer/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
"/Applications/Xcode.app/Contents/Developer/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/callingrproject 
mkdir -p build/Debug/GNU-MacOSX 
rm -f "build/Debug/GNU-MacOSX/main.o.d" 
clang++ -stdlib=libstdc++ -c -g -I. -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/library/Rcpp/include -I/Library/Frameworks/R.framework/Resources/library/RInside/include -I/usr/local/Cellar -std=c++98 -MMD -MP -MF "build/Debug/GNU-MacOSX/main.o.d" -o build/Debug/GNU-MacOSX/main.o main.cpp 
mkdir -p dist/Debug/GNU-MacOSX 
clang++ -o dist/Debug/GNU-MacOSX/callingrproject build/Debug/GNU-MacOSX/main.o -L/Library/Frameworks/R.framework/Resources/lib -L/Library/Frameworks/R.framework/Resources/library/Rcpp/lib -L/Library/Frameworks/R.framework/Resources/library/RInside/lib -L/Library/Frameworks/R.framework/Libraries -L/Library/Frameworks/R.framework/Resources/lib -L/Library/Frameworks/R.framework/Resources/library -L/Library/Frameworks/R.framework/Resources/modules -lRcpp -lRInside -lRlapack -lRblas -F/Library/Frameworks/R.framework/.. -framework R -stdlib=libstdc++ 

예제 빌드했다 :

clang++ -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/RInside/include -stdlib=libstdc++ -std=c++11 -mtune=native -g -O3 -Wall -pedantic -Wconversion -Wall -I/usr/local/include rinside_callbacks0.cpp -F/Library/Frameworks/R.framework/.. -framework R -L/Library/Frameworks/R.framework/Resources/lib -lRblas -L/Library/Frameworks/R.framework/Resources/lib -lRlapack /Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/lib/libRcpp.a /Library/Frameworks/R.framework/Versions/3.0/Resources/library/RInside/lib/libRInside.a -o rinside_callbacks0 
1

:

Undefined symbols for architecture x86_64: 
    "std::string::find_last_of(char, unsigned long) const", referenced from: 
     demangler_one(char const*) in libRcpp.a(api.o) 
    "std::string::find(char const*, unsigned long) const", referenced from: 
     short_file_name(char const*) in libRcpp.a(api.o) 
    "std::string::size() const", referenced from: 
     std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libRcpp.a(api.o) 
     MemBuf::add(std::string const&) in libRInside.a(MemBuf.o) 
    "std::string::c_str() const", referenced from: 
     RInside::parseEval(std::string const&, SEXPREC*&) in libRInside.a(RInside.o) 
     SEXPREC* Rcpp::pairlist<Rcpp::Function, Rcpp::traits::named_object<SEXPREC*>, Rcpp::traits::named_object<SEXPREC*> >(Rcpp::Function const&, Rcpp::traits::named_object<SEXPREC*> const&, Rcpp::traits::named_object<SEXPREC*> const&) in libRInside.a(RInside.o) 
     short_file_name(char const*) in libRcpp.a(api.o) 
     string_to_try_error(std::string const&) in libRcpp.a(api.o) 
     Rcpp::RObject::AttributeProxy::set(SEXPREC*) const in libRcpp.a(api.o) 
     demangle(std::string const&) in libRcpp.a(api.o) 
     Rcpp::RObject::AttributeProxy::get() const in libRcpp.a(api.o) 

그리고 오류 메시지의 끝에

당신은 r-sig-mac 목록에 대한 토론뿐만 아니라 여기에 대해서도 공부합니다. (예를 들어, [rcpp] mavericks).

난 당신이 필요로하는 모든는 -O3 -Wall -pedantic 같은

CC=clang 
CXX=clang++ 
CXXFLAGS=-stdlib=libc++ -std=c++11 

플러스 무엇이든 다른 옵션 말을 당신의 CXXCXXFLAGS 변수를 확장하는 것이라고 생각한다.

+0

나는 그것들을 이미 시험해 보았고 ~/.R/Makevars와 환경 변수를 통해 작동하지 않았다. Xcode 4.6.3으로 다운 그레이드하고 g ++를 별도로 설치합니다. 우리는 그것으로부터 나오는 것을 볼 것입니다. –

+0

흠. RInside는 Rcpp보다 훨씬 더 많이 필요하지 않아야합니다. 그래서 조금 혼란 스럽습니다. 어쩌면 rcpp-devel 목록도 시도해보십시오. –

+0

당신이 인용 한'make' 호출은 C++ 라이브러리를 링크하는 것처럼 보이지 않습니다. 어쩌면 LDLIBS를 추가로 설정해야할까요? 나는 이것이 XCode와 함께 작동해야한다고 생각하지만, 내가 말했듯이, 나는 맥 사용자가 아니다. –