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