__cxx11::string을 std::string으로 변환: 호환되지 않는 라이브러리 처리 가이드
std::__cxx11 간의 비호환성 발생: :string 유형과 일반 std::string은 실망스러운 문제가 될 수 있습니다. C 11용으로 구성되지 않은 라이브러리와 인터페이스하려고 할 때 이러한 유형 간에 변환해야 할 필요성이 발생합니다. 그러나 단순히 (string)을 사용하여 std::__cxx11::string을 std::string으로 캐스트하는 것만으로는 충분하지 않습니다.
이 문제는 종종 다음과 같은 링커 오류로 나타날 수 있습니다.
undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, H5::DataType const&) const'
Ursache 이해:
이러한 비호환성은 GCC 5의 사용에 있습니다. GCC 5에는 C 표준 라이브러리에 대한 이중 ABI가 도입되었습니다. 여기서 하나의 ABI로 컴파일된 코드는 다른 ABI로 컴파일된 코드와 연결될 수 없습니다. 코드가 최신 ABI를 사용하는 동안 타사 라이브러리가 이전 ABI로 컴파일된 경우 연결 문제가 발생할 수 있습니다.
해결책:
이 문제를 해결하려면 , 표준 라이브러리 헤더를 포함하기 전에 매크로 _GLIBCXX_USE_CXX11_ABI를 0으로 정의합니다. 이렇게 하면 GCC가 이전 ABI를 사용하게 되어 타사 라이브러리와의 호환성이 보장됩니다.
#define _GLIBCXX_USE_CXX11_ABI 0 #include <iostream> #include <string>
이 매크로가 정의되면 링커는 std::__cxx11의 기호 및 변환을 성공적으로 확인할 수 있어야 합니다. ::string에서 std::string까지 오류 없이 진행되어야 합니다.
위 내용은 라이브러리를 연결할 때 `std::__cxx11::string` 및 `std::string` 비호환성 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!