2012-06-16 3 views
12

Mac에서 libC++ 또는 libstdC++로 라이브러리가 빌드되었는지 어떻게 알 수 있습니까?은 Mac에서 libC++ 또는 libstdC++로 빌드 된 라이브러리였습니다

내가 -L을 otool 사용하고있다, 그러나 이것은 (맥이 더 LDD가 없습니다) 내가 라이브러리 X가있는 경우

것은, 나는 내가에서 이동을 다시해야하는 경우 알고 싶어 보여하지 않는 것 GCC가 cl. 거리다. 나는 GCC를 가진 많은 라이브러리를 만들었고, mac 라이브러리는 일반적으로 clang AFAIK로 만들어졌다.

답변

3

동적 라이브러리 인 경우 otool -L은 해당 라이브러리 (예 : C++ 인 경우)에 대해 빌드 된 경우 libstdc++으로 표시됩니다.

정적 라이브러리의 경우 질문에 의미가 없습니다. 정적 라이브러리는 다른 라이브러리에 대해 빌드되지 않습니다.

그리고 컴파일러를 바꾸기 때문에 아무 것도 다시 빌드하지 않아도됩니다. 하나의 시스템 전체 C++ 라이브러리가 있으며 안정적인 ABI가 있습니다.

+0

흠 - ABI에 대한 귀하의 의견이 libC++와 관련하여 올바르지 않은 것으로 보입니다. v libstdC++ - http://stackoverflow.com/a/8457799/1460739 – user1460739

+0

문제는 컴파일러가 변경된 것이 아니라 더 많은 표준 라이브러리가 변경된 것입니다. – user1460739

+1

그 다른 질문은 특정 C++ 라이브러리를 사용하는 프로그램을 컴파일하는 것이지만 동일한 C++ 라이브러리에 대해 컴파일되지 않은 라이브러리와 링크하는 프로그램에 관한 것입니다. 컴파일러가 오버라이드하지 않고 컴파일러에게 맡기면 모든 시스템에 대해 stdC++ 라이브러리가 만들어지고 작동합니다. 그것을 덮어 쓰는 경우 모든 것을 위해 같은 방법으로 오버라이드해야합니다. –

8

정적 라이브러리 : nm -a helloworld.a | grep __1

당신이 라인은, 예를 들어, __1를 포함하는 표시되는 경우 __121__basic_string 인 경우 라이브러리가 libC++로 컴파일되었습니다. 그러나 함수 서명 중 C++ 표준 라이브러리 유형을 사용하지 않으면이 기능이 작동하지 않을 수 있습니다.

동적 라이브러리 : libc의 ++이나 된 libstdC++ dylib에 대한 의존성 otool -L helloworld

봐.