배경:
libc를 사용하여 C 0x 모드에서 Clang을 사용하여 Boost::program_options 예제를 컴파일하고 링크하려고 하면 다음 오류가 발생합니다.
Undefined symbols for architecture x86_64: // Various undefined symbols related to Boost::program_options
설명:
이 오류의 주된 이유는 libc가 GCC의 libstdc와 바이너리 호환되지 않기 때문입니다. 특히:
해결책:
이 문제를 해결하려면 libc를 표준 라이브러리로 사용하여 Clang을 사용하여 Boost를 다시 빌드해야 합니다.
clang++ -stdlib=libc++ ...
바이너리 비호환 이유:
바이너리 비호환으로 인한 우발적인 혼합 및 런타임 충돌을 방지하기 위해 libc는 C 11의 인라인 네임스페이스 기능을 활용하여 ABI(Application Binary Interface)를 수정합니다. std::string은 동일한 API(응용 프로그래밍 인터페이스)를 유지합니다. 이렇게 하면 링커가 libstdc의 std::string과 libc의 std::string을 구별할 수 있습니다.
위 내용은 C 0x 모드에서 libc를 사용하는 Clang이 Boost::program_options 예제를 연결하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!