Ich versuche, die JsonCpp-Bibliothek zu verwenden. Ich bin auf Windows, mit MinGW und CodeBlocks.
Wenn ich etwas aus den json-Kopfzeilen einschließe, implodiert mein Linker und gibt diese zwei Fehler aus. Ich habe angefangen mich umzusehen und ich habe diese zwei anderen Fragen gefunden, die mein Problem im Grunde beschreiben:
Problem mit g ++ und "undefinierter Verweis auf '__gxx_personality_v0'"
Wofür ist __gxx_personality_v0?
Und wenn ich die zwei fehlenden Variablen als void pointers deklariere, wie unten, verschwindet das Problem:
%Vor%Allerdings verstehe ich nicht, warum dieser Fehler passiert. CodeBlocks ist so eingerichtet, dass es migw32-g ++ für cpp-Dateien verwendet und das Hinzufügen der Option -lstdc ++ das Problem nicht behebt. Genauso wenig wie die Option -fno-exception (ich möchte Ausnahmen, wohlgemerkt, ich habe es nur versucht).
Ich nehme auch eine Boost-Bibliothek in die selbe Datei auf und das verursacht keine Probleme.
BEARBEITEN:
Die Fehlerausgabe ist genau das, was ich in meinem Titel gesagt habe: Ich bekomme während der Verlinkung insgesamt 22 undefinierte Verweise auf _Unwind_Resume und __gxx_personality_v0. Mein Code ist:
%Vor%Der Fehler ist nur vorhanden, wenn ich die JsonCPP-Bibliothek einschließe / verwende. Durch das Auskommentieren der kommentierten Zeilen wird das Problem behoben.
Die Befehlszeilenausgabe ist dies:
%Vor%ZWEITE BEARBEITUNG: Ich füge die Befehlszeilen hinzu, die ich zum Kompilieren der Bibliothek verwende:
%Vor%Ich habe das schließlich behoben, indem ich in Code :: Blocks den Quellcode von JsonCpp importiert habe und die Bibliothek selbst erstellt habe. Ich bin immer noch verblüfft darüber, warum die mit Scons erstellte Bibliothek nicht funktioniert hat, da sie den gleichen Compiler verwendet, den Code :: Blocks verwendet, aber gleichzeitig nicht (oder der Fehler wäre nicht vorhanden gewesen) ).
Für diejenigen, die von google kommen (wie ich), ist die wahre Ursache der undefinierten Verweise auf _Unwind_Resume
und __gxx_personality_v0
"die Verwendung eines gcc, der eine andere Stapelabwicklungsmethode als dwarf2 verwendet" [ 1 ]
In meinem Fall wurde versucht, den mit GCC 4.9 kompilierten Code mit einer Bibliothek zu verknüpfen, die mit GCC 4.8 oder niedriger kompiliert wurde. Die Lösung besteht darin, die Bibliothek mit demselben Compiler neu zu kompilieren, mit dem Sie gerade arbeiten.