>백엔드 개발 >C++ >컴파일 중 -stdlib=libstdc 플래그는 언제 필요합니까?

컴파일 중 -stdlib=libstdc 플래그는 언제 필요합니까?

DDD
DDD원래의
2024-10-24 04:12:02640검색

When is the -stdlib=libstdc   Flag Required During Compilation?

컴파일에 -stdlib=libstdc 플래그가 필요한 경우는 언제입니까?

-stdlib=libstdc 플래그는 컴파일 중에 libstdc 표준 라이브러리 구현을 사용하도록 컴파일러와 링커에 지시합니다. 그러나 이 플래그를 항상 명시적으로 지정할 필요는 없습니다.

다른 플랫폼에서 Linux 또는 최신 GCC를 사용하는 경우

대부분의 Linux 배포판과 현재 GCC 버전의 경우 libstdc는 기본 표준 라이브러리 구현. 따라서 이러한 플랫폼에서 C 11 코드를 컴파일할 때 -stdlib=libstdc 플래그를 사용할 필요가 없습니다. 간단히 다음 명령을 사용하세요.

g++ -std=c++11 input.cxx -o a.out (GNU compiler)
g++ -std=gnu++11 input.cxx -o a.out

Mavericks 이전의 macOS에서

Mavericks 이전의 macOS 릴리스에서 g는 clang에 대한 심볼릭 링크였습니다. Apple의 이전 libstdc 구현이 기본값이었습니다. C 11 라이브러리 지원을 제공하는 libc 를 사용하려면 -stdlib=libc 플래그가 필요했습니다.

g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out (clang, not GNU compiler!)
g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out (clang, not GNU compiler!)
clang++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out

Mavericks 이후 macOS

macOS Mavericks 이상 , libc가 기본값입니다. -stdlib=libstdc 플래그를 명시적으로 전달하는 것은 불필요합니다.

clang++ -std=c++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out

예외

-stdlib=libstdc 플래그를 명시적으로 사용하는 것이 유익한 특정 경우가 있을 수 있습니다.

  • 호환성을 위해 libstdc가 필요한 외부 라이브러리에 연결하는 경우
  • libstdc와 다른 라이브러리 간에 기호 충돌이 발생하는 경우
  • 디버깅 또는 문제 해결 목적으로

위 내용은 컴파일 중 -stdlib=libstdc 플래그는 언제 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.