2013-07-01 7 views
5

Gestern entschied ich mich, Allegro 5 herunterzuladen, zu installieren und zu versuchen. Ich habe auch Code :: Blocks 12.11 mit dem MinGW heruntergeladen Compiler. Ich setze alles auf und installiert alles richtig (oder so dachte ich) und versucht, einen Beispielcode ausführen, um zu sehen, ob es funktionieren würde:Der Prozedureinstiegspunkt _gxx_personality_v0 konnte nicht in der dynamischen Linkbibliothek gefunden werden libstdC++ - 6.dll Error

#include <stdio.h> 
#include <allegro5/allegro.h> 

int main(int argc, char **argv){ 

    ALLEGRO_DISPLAY *display = NULL; 

    if(!al_init()) { 
     fprintf(stderr, "failed to initialize allegro!\n"); 
     return -1; 
    } 

    display = al_create_display(640, 480); 
    if(!display) { 
     fprintf(stderr, "failed to create display!\n"); 
     return -1; 
    } 

    al_clear_to_color(al_map_rgb(0,0,0)); 

    al_flip_display(); 

    al_rest(10.0); 

    al_destroy_display(display); 

    return 0; 
} 

Wenn ich versuche, das Programm eine Fehlermeldung Feld angezeigt kompilieren und ausführen zu sagen "Der Prozedureinstiegspunkt _gxx_personality_v0 konnte nicht in der Dynamic Link Library libstdC++ - 6.dll gefunden werden." Ich suchte etwa eine Stunde lang im Internet nach einer Lösung für dieses Problem, wie ich es für die meisten Dinge mache, aber ich kam mit leeren Händen auf. Ich frage mich, ob jemand irgendwelche Ideen für irgendwelche Korrekturen zu diesem Problem hat, wenn ja, lass es mich so schnell wie möglich wissen! Danke im Voraus!

+0

Was gibt 'gcc -v' Ihnen? Passt es zu der Version von Allegro, die Sie heruntergeladen haben ? – Matthew

Antwort

8

__gxx_personality_v0 wird in der Ausnahmebehandlung der C++ - Bibliothek verwendet. MinGW kann ein paar verschiedene Ausnahmemodelle auf dem x86 unterstützen: sjlj (setjmp/longjmp) oder DWARF (DW2). Soweit ich weiß, welches Modell verwendet wird, wird in den Compiler kompiliert - es ist nicht etwas, das mit einer Befehlszeilenoption ausgewählt werden kann.

Das sjlj-Ausnahmemodell wird mit __gxx_personality_sj0 verknüpft, das DW2-Ausnahmemodell verweist auf __gxx_personality_v0. Es sieht so aus, als würde Ihr Compiler das dw2-Exception-Modell erstellen, aber zur Laufzeit wird ein libstdc++-6.dll gefunden, der mit dem sjlj-Modell erstellt wurde. Sehen Sie, ob Sie mehrere Versionen von libstdc++-6.dll auf Ihrem System haben, und sehen Sie, ob das Kopieren eines anderen in das gleiche Verzeichnis wie Ihr Programm das Problem behebt.

Sie können nm libstdc++-6.dll | grep personality verwenden, um zu sehen, welche Ausnahme 'Persönlichkeit' die DLL verwendet.

+0

Danke für die Antwort! Ich suchte meinen gesamten Computer und konnte keine andere .dll mit diesem Namen finden, außer dem, der im Ordner MinGW bin. Ich habe versucht, es in den Projektordner und kompilieren und ausführen, aber es gibt immer noch den gleichen Fehler :( – TobyFromMarketing

+0

Was bedeutet 'nm libstdC++ - 6.dll | grep Persönlichkeit' sagen dafür? –

+0

Ah - hängt dieses Programm von DLLs ab, die vorinstalliert waren (dh, nicht auf Ihrem System kompiliert Wenn ja, dann ist Ihr Compiler vielleicht 'sjlj' und eine oder mehrere dieser DLLs wurden erstellt, die 'dw2' Ausnahmebehandlung erwarten. Möglicherweise müssen Sie alle Bibliotheken selbst erstellen oder eine Alternativbibliotheken werden so erstellt, dass sie mit der Ausnahmebehandlung für Ihren Compiler übereinstimmen (oder möglicherweise MinGW-Compiler auf einen anderen umstellen, der die Ausnahmebehandlung von dw2 verwendet). –

1

Ich lief auch in diese. Hat jemand gesucht, hat jemand erwähnt, ob er sich im Debug- oder Release-Modus befand oder nicht. Dies gilt speziell für Code :: Blocks. Ich habe festgestellt, dass ich im Debug-Modus war. Ich habe das in den Freigabemodus geändert und mein Programm kompiliert und ausgeführt.

Ich bin durch diese obwohl beunruhigt ... Es scheint mir, dass es in beiden Modi arbeiten sollte, also wie repariere ich es, so dass es wird? Ich habe keine Antwort. Vielleicht wird jemand mit der Lösung kommentieren. In der Zwischenzeit kompilieren und starten Sie den Release-Modus anstelle des Debug-Modus.

Ich habe gerade ein wenig verrückt Wissenschaft, entfernt die libstdC++ 6.dll von MinGW/bin und legte es in einen anderen Ordner. Dann habe ich die gleiche Datei von Gimp/bin kopiert. Kein Linkerfehler mehr, stattdessen erhalte ich einen Fehler, der besagt, dass die Anwendung nicht gestartet werden konnte :(Kompiliert und läuft immer noch im Freigabemodus.

Verwandte Themen