2016-07-18 2 views
1

저는 소스에서 무언가를 만들고 있습니다. 내 시스템의 gcc 및 stdlibC++는 너무 오래되었지만 사용할 수있는 빌드가 있습니다. 기본적으로 clang은 stdlibC++를 사용하지만 clang이 선택적으로 설치되어 libC++을 사용할 수 있습니다.libC++가 설치되어 있는지 확인하는 방법은 무엇입니까?

clang과 함께 libC++가 설치되어 있는지 확인하는 가장 좋은 방법은 무엇입니까?

+0

무엇이 오류입니까? –

+1

어떤 시스템입니까? 다양한 linus에 당신이 가지고있는 패키지 관리자 (apt, yum, rpm ...)에 대한 패키지 관리자 질의 스위치를 사용하십시오. 맨 페이지 나 --help를 사용하십시오. – CarlH

+0

C++을 사용하려면'clang ++'을 명령으로 명시 적으로 사용해야합니다. –

답변

3

약간 더 나은 대답 #define _LIBCPP_VERSION 3700는, 당신은 ++ libc를 가지고있다.

+0

이 라이너가 좋습니다. 최소한 내 시스템에서는 n.m.의 접근 방식을 전체 명령을 다시 입력하지 않고는 변경할 수 없습니다. 과 -E -dM과 같은 기호가 무엇인지 설명해 주시겠습니까? 또한 많은 clang 빌드 버전이있는 사소한 시스템에서이를 추가 할 것입니다. "clang"을 path/to/particular-clang-build/bin/clang으로 바꿀 수 있습니다. – okovko

+1

'#include '에 관해서는 http://stackoverflow.com/questions/31657499/how-to-detect-stdlib-libc-in-the-preprocessor를 참조하십시오 (재미있는 점은 다른 대답에 대한 응답으로 충분합니다). clang ++ -E -dM은 clang에게 소스를 컴파일하지 말고 그냥 전처리 ('-E') 한 다음 정의 된 모든 것을 인쇄합니다 ('-dM'). –

-1

gcc와 clang이 혼동을 일으킬 가능성이 있습니다. 코드를 C++로 컴파일하려면 clang 대신 gcc 대신 g++, 각각 clang++을 사용해야합니다.

일부 프로그램은 거의 확실하기 때문에 libc++ 라이브러리 자체가 누락 된 것으로 의심됩니다.

+0

글쎄, 그것은 컴파일러 자체를 설정하는 것입니다. cmake는 clang ++ 대신 clang을 내부적으로 호출 할 수 있지만, 컴파일러를 설정하는 변수가 있어야한다고 생각합니다. (자체에는 하나가 있습니다) –

+0

라이브러리가 누락 되었다면 놀라실 것입니다. Gcc는 지침에 따라 해당 라이브러리에 링크 할 수 있어야합니다. –

+0

... 댓글을 삭제하고 downvoting 완전히 무례입니다! Lol –

2

는 다음 라이브러리가 설치되어 있는지 확인하는 방법은 다음과 같습니다 터미널에

유형 ldconfig -p | grep libc++. 어떤 시스템을 사용하든 상관 없습니다. libC++가 설치되어 있지 않으면, 터미널은 아무것도 말하지 않을 것입니다. 설치되어 있으면 사용 가능한 버전이 표시됩니다.

+0

@okovko 이것을 확인하십시오. 시스템에 소프트웨어를 설치하는 방법을 보여줍니다. 시도 해봐. https://ask.fedoraproject.org/ko/question/7863/how-do-i-search-for-and-install-software-packages-in-fedora/ 그 후, 우리는 쓸모 없기 때문에이 토론을 삭제할 수 있습니다. . –

+0

그냥 신선한 것을 설치하는 것이 좋겠지 만, 그것은 내 시스템이 아니기 때문에 의문의 여지가 없습니다. – okovko

+0

@okovko 글쎄, 당신이 그것을 사용할 수 있기를 바랍니다. 이제이 토론을 삭제하자. –

4

의 libC++가 설치되어 있는지 확인하는 가장 간단한 방법은 사소한 프로그램을 사용하는 것입니다

clang++ -xc++ -stdlib=libc++ - <<EOF 
int main(){} 
EOF 

이 실패하면 ++의 libc가 없습니다. 실제 응용 프로그램에서

추가, 사용자가 제공하는 컴파일러 및 링커 옵션 :

clang++ $(CXXFLAGS) $(LDFLAGS) -xc++ -stdlib=libc++ - <<EOF 

때문에 사용자가 해당 된 libc를 지정할 수있는 기회를 가지고 ++ 표준이 아닌 장소에 설치됩니다. 그 같은 인쇄되면

printf "#include <ciso646>\nint main() {}" | clang -E -stdlib=libc++ -x c++ -dM - | grep _LIBCPP_VERSION

: N, N- @보다

+0

[libC++ docs] (http://libcxx.llvm.org/docs/UsingLibcxx.html)은 실제 응용 프로그램에서 $ (CXXFLAGS) 및 $ (LDFLAGS)가 될 세부 정보를 제공합니다. – okovko

관련 문제