2012-08-15 8 views
11

He estado usando MinGW GCC versión 4.4 o un tiempo, y he decidido que es hora de actualizar. Fui al sitio web de MinGW y descargué la última versión de GCC (4.7.0).Choques simples del programa

Después de eliminar mi versión anterior e instalar la versión más nueva, incluso el programa más simple se bloqueará. Por ejemplo, si puedo compilar este programa

#include <iostream> 

using namespace std; 

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

    return 0; 
} 

con la línea de comandos

g++ hello.cpp -o hello.exe 

Se imprimirá "Hola, mundo" y luego estrellarse. Sin embargo, si puedo compilar con la siguiente línea de comandos:

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

se ejecutará perfectamente bien, sin que se caiga en absoluto.

Ahora, si cambio el programa de entrada, y hacerlo un poco más complicado:

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

Sin la opción de optimización (O3), que se colgará antes de imprimir "Introduzca una cadena:" Sin embargo, , con la línea de optimización de código, se bloquea después de ingresar una cadena.

Ahora, finalmente a mi pregunta. ¿Qué puedo hacer para solucionar esto? ¿Tendré que volver a una versión anterior de GCC para usarla? Además, ¿por qué GCC no compilaría un programa simple correctamente?


Actualización: El error fue causado por la instalación de GCC, al instalar con el instalador MinGW, y elegir la opción "Descarga últimos catálogos de repositorio", sería reproducir el error. Sin embargo, si utilicé el mismo instalador y elegí "Usar catálogos de repositorio preempaquetados", el error ya no existe. Por lo tanto, hay un error en la última versión de los binarios que figuran en los catálogos MinGW GCC.

+8

Suena como si hubiera corrompido su biblioteca de depuración. El hecho de que las optimizaciones "resuelven" el problema significa que las bibliotecas de tiempo de ejecución de lanzamiento están bien. Pero las bibliotecas de tiempo de ejecución de depuración de alguna manera están mal configuradas. – Mysticial

+0

Pero dijo que se bloquea con las optimizaciones habilitadas. –

+0

¿Entonces tal vez algo salió mal con la instalación de GCC, potencialmente algo se corrompió? Volveré a descargar y volver a instalarlo para ver si eso soluciona algo. – Alex

Respuesta

4

Me encontré con un problema muy similar, donde una versión de lanzamiento estaba bien y una construcción de depuración estaba rota. La solución fue perorm los siguientes:

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

Esto podría haber sido un doble matar, pero al menos aún cuando ayudó a "actualizar" No se pudo eliminar algunas bibliotecas anteriores.

+0

Intenté hacer eso, volví a descargar la última versión de gcc e ingresé esos tres comandos para actualizar, actualizar y reinstalar. Sin embargo, aún creará un programa que se bloqueará. Hasta ahora, la única forma en que he podido hacer que funcione es usar los "catálogos de repositorio preempaquetados", lo que hace que se instale gcc 4.6.2 en lugar de 4.7.0 – Alex