2012-08-15 29 views
11

Quindi ho utilizzato MinGW GCC versione 4.4 o un altro e ho deciso che è ora di eseguire l'aggiornamento. Sono andato al sito Web di MinGW e ho scaricato l'ultima versione di GCC (4.7.0).Semplice arresto anomalo del programma

Dopo aver eliminato la versione precedente e installato la versione più recente, anche il programma più semplice si bloccherà. Per esempio, se compilo questo programma

#include <iostream> 

using namespace std; 

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

    return 0; 
} 

con la riga di comando

g++ hello.cpp -o hello.exe 

Si stamperà "Ciao, mondo" e poi bloccarsi. Tuttavia, se lo compilo con la seguente riga di comando:

g++ -O3 hello.cpp -o hello.exe 

Funzionerà perfettamente, senza schiantarsi affatto.

Ora, se cambio il programma di input, e renderlo un po 'più complicato:

#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; 
} 

Senza l'opzione di ottimizzazione (O3), andrà in crash prima di stampare "Inserire una stringa:" però , con la linea di ottimizzazione del codice, si blocca dopo aver inserito una stringa.

Ora, finalmente alla mia domanda. Cosa posso fare per risolvere il problema, dovrò semplicemente tornare a una versione precedente di GCC per poterlo utilizzare? Inoltre, perché GCC non dovrebbe compilare correttamente un semplice programma?


Update: L'errore è stato causato dall'installazione GCC, quando si installa con l'installatore MinGW, e scegliendo l'opzione "Scarica gli ultimi cataloghi repository", sarebbe riprodurre l'errore. Tuttavia, se ho utilizzato lo stesso programma di installazione e scelto "Usa cataloghi di repository preconfezionati", l'errore non esiste più. Quindi c'è qualche errore nell'ultima versione dei binari elencati nei cataloghi GCC MinGW.

+8

Sembra che tu abbia inserito la tua libreria di debug. Il fatto che le ottimizzazioni "risolvano" il problema significa che le librerie di runtime di rilascio sono soddisfacenti. Ma le librerie di runtime di debug sono in qualche modo configurate in modo errato. – Mysticial

+0

Ma ha detto che si blocca con le ottimizzazioni abilitate. –

+0

Quindi forse qualcosa è andato storto con l'installazione di GCC, potenzialmente qualcosa è stato corrotto? Lo scaricherò di nuovo e lo reinstallerò per vedere se questo risolve qualsiasi cosa. – Alex

risposta

4

Mi sono imbattuto in un problema molto simile, in cui una versione di rilascio andava bene e una build di debug è stata interrotta. La soluzione era quella di perorm i seguenti:

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

Questo potrebbe essere stato un doppio uccidere, ma almeno anche aiutato quando "upgrade" non potrebbe rimuovere alcune librerie precedenti.

+0

Ho tentato di farlo, ho scaricato di nuovo l'ultima versione di gcc e ho inserito questi tre comandi per l'aggiornamento, aggiorna e reinstalla. Tuttavia, creerà comunque un programma che si bloccherà. Finora, l'unico modo in cui sono riuscito a farlo funzionare è utilizzare i "cataloghi di repository preconfezionati", che causano l'installazione di gcc 4.6.2 invece di 4.7.0 – Alex

Problemi correlati