2012-08-15 29 views
11

So habe ich MinGW GCC Version 4.4 oder eine Weile verwendet, und entschied, dass es Zeit für ein Upgrade ist. Ich ging zur MinGW-Website und lud die neueste Version von GCC (4.7.0) herunter.Einfaches Programm stürzt ab

Nachdem ich meine vorherige Version gelöscht und die neueste Version installiert habe, stürzt auch das einfachste Programm ab. Zum Beispiel, wenn ich dieses Programm

#include <iostream> 

using namespace std; 

int main() { 
    cout << "Hello, World" << endl; 

    return 0; 
} 

mit der Befehlszeile kompilieren

g++ hello.cpp -o hello.exe 

Es gibt aus: „Hallo, Welt“ und dann abstürzen. Allerdings, wenn ich es mit der folgenden Befehlszeile kompilieren:

Es wird einwandfrei funktionieren, ohne überhaupt abzustürzen.

Nun, wenn ich das Eingabeprogramm zu ändern, und machen es etwas komplizierter:

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    string str; 

    cout << "Enter a string: "; 
    getline (cin, str); 

    if (str == "foo") 
     cout << "You entered foo!" << endl; 
    else 
     cout << "You entered: " << str; 

    return 0; 
} 

Ohne die Optimierungsoption (O3), wird es vor dem Drucken aus „eine Zeichenfolge eingeben:“ abstürzen, aber Mit der Code-Optimierungszeile stürzt es ab, nachdem eine Zeichenfolge eingegeben wurde.

Nun endlich zu meiner Frage. Was kann ich tun, um dies zu beheben, muss ich einfach zu einer früheren Version von GCC zurückkehren, um es zu benutzen? Warum sollte GCC ein einfaches Programm nicht korrekt kompilieren?


Update: Der Fehler durch die GCC Installation verursacht wurde, wenn sie mit dem MinGW Installer installieren, und wählen Sie die Option "neueste Repository Kataloge Download", würde es den Fehler reproduzieren. Wenn ich jedoch das gleiche Installationsprogramm verwendet und "Vordefinierte Repository-Kataloge verwenden" gewählt habe, ist der Fehler nicht mehr vorhanden. Daher gibt es einen Fehler in der neuesten Version der Binärdateien, die in den MinGW GCC-Katalogen aufgelistet sind.

+8

Klingt, als ob Sie Ihre Debugging-Bibliothek durchgebrannt haben. Die Tatsache, dass Optimierungen das Problem "lösen", bedeutet, dass die Release-Laufzeitbibliotheken in Ordnung sind. Aber die Debug-Laufzeitbibliotheken sind irgendwie falsch konfiguriert. – Mysticial

+0

Aber er sagte, es stürzt mit optimierten Optimierungen ab. –

+0

Also ist vielleicht etwas schief gelaufen mit der GCC-Installation, möglicherweise wurde etwas beschädigt? Ich werde es erneut herunterladen und neu installieren, um zu sehen, ob das irgendetwas behebt. – Alex

Antwort

4

Ich habe in sehr ähnliches Problem, wo ein Release-Build in Ordnung war und ein Debug-Build wurde gebrochen. Die Lösung war Folgendes perorm:

mingw-get update 
mingw-get upgrade 
mingw-get install gcc g++ mingw32-make --reinstall 

Dies könnte gewesen ein zwei zu töten, aber zumindest ist es auch geholfen, als „Upgrade“ nicht einige frühere Bibliotheken entfernen konnte.

+0

Ich habe versucht, das zu tun, die neueste Version von gcc redownloadet und diese drei Befehle eingegeben, um zu aktualisieren, aktualisieren und neu installieren. Es wird jedoch weiterhin ein Programm erstellen, das abstürzen wird. Bis jetzt war die einzige Möglichkeit, es zum Laufen zu bringen, die Verwendung der "vorgepackten Repository-Kataloge", die dazu führen, dass gcc 4.6.2 statt 4.7.0 installiert wird – Alex

Verwandte Themen