Подтвердить что ты не робот

Простые сбои программы

Итак, я использую MinGW GCC версии 4.4 или некоторое время, и решил, что время для обновления. Я пошел на сайт MinGW и загрузил последнюю версию GCC (4.7.0).

После удаления моей предыдущей версии и установки самой последней версии, даже самая простая программа выйдет из строя. Например, если я скомпилирую эту программу

#include <iostream>

using namespace std;

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

    return 0;
}

с командной строкой

g++ hello.cpp -o hello.exe

Он выведет "Hello, World", а затем выйдет из строя. Однако, если я скомпилирую его с помощью следующей командной строки:

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

Он будет работать отлично, без сбоев.

Теперь, если я изменю программу ввода и сделаю ее несколько более сложной:

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

Без опции оптимизации (-O3) она будет разбиваться, прежде чем распечатывать "Введите строку:", однако, с помощью строки оптимизации кода, она вылетает после ввода строки.

Теперь, наконец, на мой вопрос. Что я могу сделать, чтобы исправить это, мне просто нужно вернуться к предыдущей версии GCC, чтобы использовать ее? Кроме того, почему GCC не будет составлять простую программу правильно?


Обновление: Ошибка была вызвана установкой GCC, при установке с установщиком MinGW и выбором опции "Загрузка последних каталогов репозитория" она воспроизведет ошибку. Однако, если я использовал один и тот же установщик и выбрал "Использовать предварительно упакованные каталоги репозитория", тогда ошибка больше не существует. Таким образом, в последней версии двоичных файлов, перечисленных в каталогах MinGW GCC, есть некоторая ошибка.

4b9b3361

Ответ 1

У меня возникла очень похожая проблема, когда сборка выпусков была прекрасной, и сборка отладки была нарушена. Решение заключалось в следующем:

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

Это может быть двойное убийство, но, по крайней мере, это даже помогло, когда "обновление" не могло удалить некоторые предыдущие библиотеки.