Итак, я использую 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, есть некоторая ошибка.