问题
So I've been using MinGW GCC version 4.4 or a while, and decided it's time to upgrade. I went to the MinGW website and downloaded the latest version of GCC (4.7.0).
After deleting my previous version, and installing the newest version, even the simplest program will crash. For example, if I compile this program
#include <iostream>
using namespace std;
int main () {
cout << "Hello, World" << endl;
return 0;
}
with the command line
g++ hello.cpp -o hello.exe
It will print out "Hello, World" and then crash. However, if I compile it with the following command line:
g++ -O3 hello.cpp -o hello.exe
It will run perfectly fine, without crashing at all.
Now, if I change the input program, and make it slightly more complicated:
#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;
}
Without the optimization option (-O3), it will crash before printing out "Enter a string: ", however, with the code optimization line, it crashes after entering a string.
Now, finally to my question. What can I do to fix this, will I simply have to revert to a previous version of GCC in order to use it? Also, why would GCC not be compiling a simple program correctly?
Update: The error was caused by the GCC installation, when installing with the MinGW installer, and choosing the option to "Download latest repository catalogues", it would reproduce the error. However, if I used the same installer and chose "Use pre-packaged repository catalogues", then the error no longer exists. So there is some error in the latest version of the binaries listed in the MinGW GCC catalogues.
回答1:
I've ran into very similar problem, where a release build was fine and a debug build was broken. The solution was to perorm the following:
mingw-get update
mingw-get upgrade
mingw-get install gcc g++ mingw32-make --reinstall
This might have been a double-kill, but at least it even helped when "upgrade" could not remove some previous libraries.
来源:https://stackoverflow.com/questions/11975941/simple-program-crashes