Conversion de std :: __ cxx11 :: ssortingng en std :: ssortingng

J’utilise c ++ 11, mais aussi certaines bibliothèques qui ne sont pas configurées pour cela, et qui nécessitent une conversion de type. En particulier, j’ai besoin d’un moyen de convertir std::__cxx11::ssortingng en std::ssortingng normal, mais googler Je ne trouve pas le moyen de le faire et mettre (ssortingng) en tête ne fonctionne pas.

Si je ne convertis pas, j’obtiens des erreurs de l’éditeur de liens comme ceci:

 undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_ssortingng<char, std::char_traits, std::allocator > const&, unsigned long, H5::DataType const&) const' 

Est-il possible que vous utilisiez GCC 5?

Si vous obtenez des erreurs d’éditeur de liens sur des références indéfinies à des symboles impliquant des types dans l’espace de noms std :: __ cxx11 ou la balise [abi: cxx11], cela indique probablement que vous essayez de lier des fichiers d’object compilés avec des valeurs différentes pour _GLIBCXX_USE_CXX11_ABI macro Cela se produit généralement lors de la liaison à une bibliothèque tierce compilée avec une version antérieure de GCC. Si la bibliothèque tierce ne peut pas être reconstruite avec le nouvel ABI, vous devrez recomstackr votre code avec l’ancien ABI.

Source: Notes de version GCC 5 / Dual ABI

Définir la macro suivante avant d’ inclure des en-têtes de bibliothèque standard devrait résoudre votre problème: #define _GLIBCXX_USE_CXX11_ABI 0

Si vous pouvez recomstackr toutes les libs incompatibles que vous utilisez, faites-le avec l’option du compilateur

-D_GLIBCXX_USE_CXX11_ABI = 1

puis recréez votre projet. Si vous ne pouvez pas le faire, ajoutez à l’option du compilateur makefile de votre projet

-D_GLIBCXX_USE_CXX11_ABI = 0

Le définir

#define _GLIBCXX_USE_CXX11_ABI 0/1

est également bon mais vous devez probablement l’append à tous vos fichiers alors que l’option du compilateur le fait pour tous les fichiers à la fois.

Je l’ai eu, la seule façon que j’ai trouvé pour résoudre ce problème était de mettre à jour tous les mingw-64 (je l’ai fait en utilisant pacman sur msys2 pour votre information).

Pour moi -D_GLIBCXX_USE_CXX11_ABI = 0 n’a pas aidé.

Il fonctionne après avoir lié la version des bibliothèques C ++ au lieu de gnustl.