> 백엔드 개발 > C++ > 라이브러리를 연결할 때 `std::__cxx11::string` 및 `std::string` 비호환성 문제를 해결하는 방법은 무엇입니까?

라이브러리를 연결할 때 `std::__cxx11::string` 및 `std::string` 비호환성 문제를 해결하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-19 00:39:10
원래의
517명이 탐색했습니다.

How to Resolve `std::__cxx11::string` and `std::string` Incompatibility Issues When Linking Libraries?

__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&amp;, unsigned long, H5::DataType const&amp;) 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿