libc ++ 또는 libstdc ++를 사용해야합니까? [닫은]


91

c / c ++를 사용하여 osx 및 linux 용 명령 줄 인터페이스 실행 파일을 개발 중입니다. 프로젝트는 opencv에 링크됩니다. libc ++ 또는 libstdc ++를 사용해야합니까?


1
잘 모르겠지만 관심이있을 것입니다. clang-developers.42468.n3.nabble.com/…
DarenW

3
이 답변 이 도움 될 수 있습니다.
Yantao Xie 2013

2
opencv에 링크하는 경우 libstdc ++를 사용하십시오. 여기 왜 stackoverflow.com/questions/13037659/...
Loozie

답변:


89

각 OS에 대해 기본 라이브러리, 즉 GNU / Linux의 libstdc ++와 Mac OS X의 libc ++를 사용합니다.

libc ++는 GNU / Linux에서 100 % 완전하지 않으며 libstdc ++가 더 완전 할 때이를 사용하는 것이 실질적인 이점이 없습니다. 또한 C ++로 작성된 다른 라이브러리에 연결하려는 경우 거의 확실하게 libstdc ++로 빌드되었으므로 사용하려면 해당 라이브러리와 연결해야합니다.

다양한 플랫폼에서 libc ++의 완전성에 대한 자세한 정보는 여기 에 있습니다.


3
Linux에서 libc ++의 완전성 상태에 대한 링크를 자세히 설명하거나 제공 할 수 있습니까? libc ++가 표준 라이브러리 헤더의 무리이기 때문에 이것이 플랫폼에 특정한 이유를 이해하지 못합니다. 아니면 Linux에서 잘 지원되지 않는 LLVM 런타임 라이브러리에 Clang wrt를 빌드해야한다는 의미입니까?
TemplateRex

1
@TemplateRex, 현재 상태를 모르겠습니다 . libcxx.llvm.org에서 볼 수 있습니다 . 나는 libc ++를 따르지 않아서 잘못된 사람에게 묻고 있지만 "표준 라이브러리 헤더 묶음"에는 플랫폼 별 코드가 전혀 없을 것이라고 제안하고 있습니까?
Jonathan Wakely 2013

Mac OS X를 실행하는 거의 동일한 Apple 하드웨어에 Linux를 설치할 수 있기 때문에 C ++ 헤더의 플랫폼 종속성이 어디에서 왔는지 궁금합니다. 내장 CPU 내장 또는 IO 및 예외 처리 항목을 둘러싼 일부 래퍼는 시스템에 따라 다르지만 이러한 항목은 librcxxrt 유형의 바이너리 레이어에서 처리된다는 것을 이해했습니다. 표준 라이브러리 헤더는 어느 정도 플러그 가능해야하지 않습니까?
TemplateRex

4
나는 하드웨어에 대해 말하는 것이 아닙니다. 다시 말하지만 libc ++에 대해 잘 모르겠지만 대부분의 C ++ 표준 라이브러리는 OS의 C 라이브러리를 통해 구현되며 예를 들어 std::ctype_base::mask값에서 <ctype.h>상수로의 매핑 은 전적으로 플랫폼에 따라 다릅니다. (CPU 내장 함수는 컴파일러에서 제공하고 예외 처리는 저수준 ABI 계층에서 수행하지만 IO는 일반적으로 저수준 항목이 아닌 C ++ 및 C 라이브러리에서 전적으로 수행됩니다.)
Jonathan Wakely 2013

1
@abergmeier, 그것은 가짜 주장입니다. 왜냐하면 (GCC 또는 다른 적합한 컴파일 프로세스와 함께 사용될 때) libstdc ++는 동적 으로든 정적 으로든 그것을 사용하는 코드에 어떤 제한도 부과하지 않기 때문입니다. LGPL이 아닙니다. FUD를 퍼 뜨리지 마십시오. gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.what
Jonathan Wakely

30

주요 Linux 배포판은 다음과 같은 이유로 LLVM libc ++를 제공하지 않습니다.

  1. Apple 및 FreeBSD와 달리 GPL + 3는 문제가되지 않으므로 여기에서 다른 스택을 구현할 필요가 없습니다.
  2. Linux 구성 요소는 오랫동안 GNU libstd ++를 중심으로 개발되었습니다. 그들 중 일부는 다른 것을 기반으로하지 않습니다.
  3. libc ++는 새로운 기능에 강하지 만 레거시 코드에는 몇 가지 문제가 있습니다.

결국 libc ++가 배포판의 일부가되면 선택적 구성 요소가됩니다. 그것에 대한 링크는 아마도 추가 옵션이 필요할 것입니다.

Jonathan이 말했듯이 기본적으로 포함 된 도구를 사용해야합니다. Clang은 GCC 대체물로 구성되어 있기 때문에 Linux에서 사용하기에 안전하므로 2 개의 컴파일러에 대해 걱정할 필요가 없습니다. 또한 두 개의 플랫폼을 대상으로하기 때문에 cmake를 살펴 봐야합니다.


2
Clang은 GCC를 대체하지 않습니다. 다른 컴파일러입니다.
Isaac Pascual 2016

4
@IsaacPascual Mario가 의미하는 것은 clang이 실행하는 플랫폼 (예 : Linux에서 실행되는 경우 gcc)에서 눈에 띄는 컴파일러를 대체하는 것이 공식적으로 설계 목표에 있다는 것입니다. 인텔의 컴파일러 afaik과 동일합니다. 더 광범위한 채택을 얻는 방법입니다.
Johan Boulé
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.