La conversion de std::__cxx11::string à std::string
J'utilise c++11, mais aussi un certain nombre de bibliothèques qui ne sont pas configurés pour elle, et besoin d'un certain type de conversion. En particulier, j'ai besoin d'un moyen de convertir std::__cxx11::string
régulièrement std::string
, mais une recherche sur google, je ne peux pas trouver un moyen de faire cela et de mettre (string)
en avant ne fonctionne pas.
Si je n'ai pas convertir-je obtenir de l'éditeur de liens erreurs de ce type:
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'
- L'erreur sonne plus comme le compilateur ne trouve pas le
insertMember()
méthode. - Hm, il peut trouver avec les autres programmes que j'ai qui n'utilisent pas
c++11
- En fait il semble être l'éditeur de liens, pas le compilateur. Que signifie "trouver" veut dire, quelles sont ces "autres programmes"?
- En outre, je suppose que vous êtes en utilisant gcc. Je m'attends à ce qu'il y a quelques
typedef __cxx11::basic_string basic_string
quelque part dansstd
espace de noms de la chaîne d'en-tête. Faire de la compilation de l'unité de compilation contenantH5::CompType
ainsi? - "trouver", comme dans la recherche d'un moyen de convertir sur google. "autres programmes": en plaindre ici, c'est le hdf5 de bibliothèque, dont je ne suis pas compiler moi-même (à l'aide de bibliothèques sur les ordinateurs partagés).
- Vous avez dit "il peut trouver avec les autres programmes que j'ai", mais votre dernier commentaire n'est pas vraiment en forme de phrase. Veuillez préciser
- "J'utilise c++11, mais aussi un certain nombre de bibliothèques qui ne sont pas configurés pour elle". Cette situation est problématique, et vous ne peut pas vraiment s'attendre à des choses à travailler. gcc.gnu.org/wiki/Cxx11AbiCompatibility web.archive.org/web/20170210052503/http://... et ainsi de suite.
- Oh désolé, pas de "trouver", je voulais dire que d'autres programmes (qui ne comprennent pas les hdf5 bibliothèque) ne donnent pas l'erreur de l'éditeur de liens.
- Votre hdf5 de la bibliothèque a été compilé avec le vieux GCC ABI. Soit demander à quelqu'un de le recompiler ou voir ma réponse.
- J'ai trouvé ma voie à cette question après le dépannage, j'ai donc pensé que je pourrais partager avec vous, le problème est que j'ai été en utilisant
gcc
au lieu deg++
compiler...
Vous devez vous connecter pour publier un commentaire.
Est-il possible que vous utilisez GCC 5?
Source: GCC 5 Notes de Version/Double ABI
La définition de la macro suivante avant y compris tous les en-têtes de la bibliothèque standard devrait résoudre votre problème:
#define _GLIBCXX_USE_CXX11_ABI 0
undefined reference
et avant de chercher la solution, j'ai vérifié toute ma tringlerie de programme et de ne pas trouver quoi que ce soit. Après que j'ai décidé de rechercher sur le web et de trouver ce. Il fonctionne comme un charme, merci 🙂Si vous pouvez recompiler tout incompatible libs que vous utilisez, le faire avec l'option de compilateur
puis de la reconstruction de votre projet. Si vous ne pouvez pas le faire, l'ajouter à votre projet makefile, l'option de compilateur
Le définir
est également bon, mais vous avez probablement besoin de l'ajouter à l'ensemble de vos fichiers, tandis que l'option de compilateur de le faire pour tous les fichiers à la fois.
J'ai eu ce que j'ai trouvé pour résoudre ce fut à la mise à jour de mingw-64 (je l'ai fait à l'aide de pacman sur msys2 pour votre information).
Pour moi -D_GLIBCXX_USE_CXX11_ABI=0 n'a pas aidé.
Il fonctionne après que j'ai lié à libs C++ version au lieu de gnustl.