Undefined reference to _unwind_resume et __ _ _ gxx_la personnalité_v0
Je suis en train d'utiliser le JsonCpp de la bibliothèque. Je suis sur Windows, en utilisant MinGW et CodeBlocks.
Quand je inclure quoi que ce soit à partir du json en-têtes, mon éditeur de liens implose et donne de ces deux erreurs. J'ai commencé à regarder autour de vous et j'ai trouvé ces deux autres questions qui, fondamentalement, décrire mon problème:
problème avec g++ et "undefined reference to `__gxx_la personnalité_v0'"
Qu'est-ce que __gxx_la personnalité_v0?
Et si je déclare deux variables manquantes comme nulle pointeurs, comme ci-dessous, le problème disparaît:
void * __gxx_personality_v0=0;
void * _Unwind_Resume =0;
Cependant, je ne comprends pas pourquoi cette erreur se produit. CodeBlocks est mis en place afin qu'il utilise migw32-g++ pour les fichiers cpp, et aussi d'ajouter de l'-lstdc++ option ne permet pas de résoudre le problème. Ni l'option -fno-exceptions ( je veux exceptions, vous l'esprit, j'essayais juste ).
Je suis aussi, y compris une bibliothèque boost dans le même fichier et qui ne cause pas de problèmes.
EDIT:
La sortie d'erreur est exactement ce que j'ai dit dans mon titre: je reçois un total de 22 pas défini des références à _Unwind_Resume et __ _ _ gxx_la personnalité_v0 au cours de la réticulation. Mon code est:
#include <boost/algorithm/string.hpp>
#include <include/json/value.h>
//void * __gxx_personality_v0=0;
//void * _Unwind_Resume =0;
int main () {
std::string str1("Hello world!");
boost::to_upper(str1);
Json::Value k;
return 0;
}
L'erreur est-il que quand j'ai include/utiliser le JsonCPP de la bibliothèque. Décommentant les lignes commentées résout le problème.
La sortie de ligne de commande est: est-ce
mingw32-g++.exe -Wall -fexceptions -g -DSFML_DYNAMIC -IC:\Users\Svalorzen\Documents\Projects\boost_1_49 -IC:\Users\Svalorzen\Documents\Projects\jsoncpp-src-0.5.0 -IC:\Users\Svalorzen\Documents\Projects\SFML-1.6\include -IC:\Users\Svalorzen\Documents\Projects\hge181\include -c C:\Users\Svalorzen\Documents\Projects\test\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -LC:\Users\Svalorzen\Documents\Projects\jsoncpp-src-0.5.0 -LC:\Users\Svalorzen\Documents\Projects\SFML-1.6\lib -LC:\Users\Svalorzen\Documents\Projects\hge181\lib -o bin\Debug\test.exe obj\Debug\main.o -fno-exceptions -lsfml-graphics -lsfml-window -lsfml-system C:\Users\Svalorzen\Documents\Projects\jsoncpp-src-0.5.0\libs\mingw\libjson_mingw_libmt.a C:\Users\Svalorzen\Documents\Projects\hge181\lib\gcc\libhge.a C:\Users\Svalorzen\Documents\Projects\hge181\lib\gcc\libhelp.a
Output size is 1.22 MB
Process terminated with status 0 (0 minutes, 3 seconds)
0 errors, 0 warnings
DEUXIÈME ÉDITION:
Je suis en ajoutant les lignes de commande que j'utilise pour compiler la bibliothèque:
g++ -o buildscons\mingw\src\lib_json\json_reader.o -c -DWIN32 -DNDEBUG -D_MT -Iinclude src\lib_json\json_reader.cpp
g++ -o buildscons\mingw\src\lib_json\json_value.o -c -DWIN32 -DNDEBUG -D_MT -Iinclude src\lib_json\json_value.cpp
g++ -o buildscons\mingw\src\lib_json\json_writer.o -c -DWIN32 -DNDEBUG -D_MT -Iinclude src\lib_json\json_writer.cpp
ar rc buildscons\mingw\src\lib_json\libjson_mingw_libmt.a buildscons\mingw\src\lib_json\json_reader.o buildscons\mingw\src\lib_json\json_value.o buildscons\mingw\src\lib_json\json_writer.o
ranlib buildscons\mingw\src\lib_json\libjson_mingw_libmt.a
Avez-vous de la sortie du compilateur? Quels sont le compilateur et l'éditeur de liens de lignes de commande?
Êtes-vous le lien avec
gcc
ou g++
? Notez que votre correctif va provoquer déréférencement de pointeur nul et un méchant plantage lors de l'exécution lorsqu'une exception est levée.J'ai ajouté la ligne de commande de sortie, j'espère que cela aide - certains arguments ( hge, sfml ) sont inutiles, mais c'est parce que je les ai mis dans ma configuration générale pour éviter de liaison dans chaque projet que je fais.
Voir ma réponse à ceci question connexe. Ce type de problème est généralement dû à une bibliothèque/ABI décalage entre le compilateur et le compilateur qui a été utilisé pour compiler la bibliothèque.
OriginalL'auteur Svalorzen | 2012-05-02
Vous devez vous connecter pour publier un commentaire.
Pour ceux à venir à ce à partir de google (comme je l'ai fait), la véritable cause de l'indéfini des références à
_Unwind_Resume
et__gxx_personality_v0
est "à l'aide de gcc qui utilise un autre déroulement de pile méthode que dwarf2" [Un]Dans mon cas, il était tentant de lier le code compilé avec GCC 4.9 vers le haut avec une bibliothèque compilée avec GCC 4.8 ou ci-dessous. La solution est de recompiler la bibliothèque avec le même compilateur que vous êtes en train de construire avec.
__Unwind_Resume
erreur quand j'ai essayé de revenir à la gcc 3 après l'utilisation de gcc 4. J'ai dû revenir en arrière et de recompiler les deux bibliothèques avec gcc 3 avant que je puisse le lien entre eux.OriginalL'auteur Riot
J'ai enfin résolu ce grâce à l'importation dans Code::Blocks le code source de JsonCpp et de la création de la bibliothèque de moi-même. Je suis toujours perplexe que la raison pour laquelle la bibliothèque a créé avec Scons n'a pas fonctionné, puisqu'il a été en utilisant le même compilateur de Code::Blocks utilise, mais en même temps, il n'a pas été ( ou l'erreur n'aurait pas été là ).
OriginalL'auteur Svalorzen