>백엔드 개발 >C++ >C 0x 모드에서 libc를 사용하는 Clang이 Boost::Program_Options 연결에 실패하는 이유는 무엇입니까?

C 0x 모드에서 libc를 사용하는 Clang이 Boost::Program_Options 연결에 실패하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 01:46:03926검색

Why Does Clang with libc   in C  0x Mode Fail to Link Boost::Program_Options?

C 0x 모드에서 libc를 사용한 clang이 Boost::Program_Options 예제

컴파일을 시도할 때 발생하는 문제를 보여줍니다. C 0x 모드에서 libc를 활용하는 clang과 함께 Boost::program_options를 연결합니다.

문제 분석

컴파일 오류는 libc와 기본 표준인 libstdc 간의 비호환성에서 발생합니다. g 에 의해 구현된 라이브러리. libc는 std::string에 대해 서로 다른 구현 세부 사항을 사용하여 libstdc와 ABI(Application Binary Interface) 차이를 도입합니다.

해결 방법

이 문제를 해결하려면 다음이 필요합니다. -stdlib=libc 플래그와 함께 clang을 사용하여 Boost를 다시 빌드합니다. 이렇게 하면 Boost 라이브러리가 실행 파일이 링크되는 동일한 표준 라이브러리에 대해 컴파일됩니다. 이는 Boost 라이브러리와 컴파일되는 프로그램 전체에서 std::string의 ABI를 조화시킵니다.

기술적 설명

libc는 인라인 네임스페이스를 활용하여 std의 ABI를 변경합니다. :string API를 수정하지 않고. 이로 인해 libstdc의 std::string과 libc의 std::__1::string이 링커에 의해 별개의 데이터 구조로 처리되는 두 라이브러리 사이에 불일치가 발생합니다.

적절한 표준으로 Boost를 다시 빌드하면 됩니다. 라이브러리에서 Boost::program_options에 대한 기호 정의는 링커에서 예상하는 것과 일치하므로 성공적인 연결이 가능합니다.

위 내용은 C 0x 모드에서 libc를 사용하는 Clang이 Boost::Program_Options 연결에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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