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 중국어 웹사이트의 기타 관련 기사를 참조하세요!