Maison > développement back-end > C++ > Comment résoudre les problèmes d'incompatibilité `std::__cxx11::string` et `std::string` lors de la liaison de bibliothèques ?

Comment résoudre les problèmes d'incompatibilité `std::__cxx11::string` et `std::string` lors de la liaison de bibliothèques ?

Barbara Streisand
Libérer: 2024-12-19 00:39:10
original
524 Les gens l'ont consulté

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

Conversion de __cxx11::string en std::string : un guide pour la gestion des bibliothèques incompatibles

Rencontre d'une incompatibilité entre std::__cxx11 : Le type :string et le std::string régulier peuvent être un problème frustrant. Lorsque vous essayez d'interfacer avec des bibliothèques qui ne sont peut-être pas configurées pour C 11, il est nécessaire de procéder à une conversion entre ces types. Cependant, tenter simplement de convertir un std::__cxx11::string en std::string en utilisant (string) ne suffit pas.

Ce problème peut souvent se manifester par des erreurs de l'éditeur de liens, telles que :

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'
Copier après la connexion

Comprendre l'Ursache :

Une cause possible de cette incompatibilité réside dans l'utilisation de GCC 5. GCC 5 a introduit deux ABI pour la bibliothèque standard C, où le code compilé avec un ABI ne peut pas être lié au code compilé avec l'autre. Si une bibliothèque tierce a été compilée avec un ABI plus ancien alors que votre code utilise le plus récent ABI, des problèmes de liaison peuvent survenir.

La solution :

Pour résoudre ce problème , définissez la macro _GLIBCXX_USE_CXX11_ABI sur 0 avant d'inclure les en-têtes de bibliothèque standard. Cela oblige GCC à utiliser l'ancien ABI, garantissant la compatibilité avec la bibliothèque tierce.

#define _GLIBCXX_USE_CXX11_ABI 0
#include <iostream>
#include <string>
Copier après la connexion

Avec cette macro définie, l'éditeur de liens devrait être capable de résoudre avec succès les symboles et la conversion depuis std::__cxx11. ::string vers std::string devrait se dérouler sans erreur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal