Ale*_*lex 11 c++ crash gcc g++
所以我一直在使用MinGW GCC 4.4版或者一段时间,并决定升级时间.我去了MinGW网站并下载了最新版本的GCC(4.7.0).
删除我以前的版本并安装最新版本后,即使是最简单的程序也会崩溃.例如,如果我编译这个程序
#include <iostream>
using namespace std;
int main () {
cout << "Hello, World" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用命令行
g++ hello.cpp -o hello.exe
Run Code Online (Sandbox Code Playgroud)
它将打印出"Hello,World"然后崩溃.但是,如果我使用以下命令行编译它:
g++ -O3 hello.cpp -o hello.exe
Run Code Online (Sandbox Code Playgroud)
它会完美运行,而不会崩溃.
现在,如果我更改输入程序,并使其稍微复杂一点:
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果没有优化选项(-O3),它将在打印出"输入字符串:"之前崩溃,但是,使用代码优化行,它会在输入字符串后崩溃.
现在,终于到了我的问题.我该怎么做才能解决这个问题,我是否只需要恢复到之前版本的GCC才能使用它?另外,为什么GCC不能正确编译一个简单的程序?
更新:错误是由GCC安装引起的,当使用MinGW安装程序进行安装,并选择"下载最新的存储库目录"选项时,它将重现错误.但是,如果我使用相同的安装程序并选择"使用预打包的存储库目录",则错误不再存在.因此,MinGW GCC目录中列出的最新版本的二进制文件存在一些错误.
我遇到过非常类似的问题,发布版本很好,而调试版本则被破坏。解决方案是执行以下操作:
mingw-get update
mingw-get upgrade
mingw-get install gcc g++ mingw32-make --reinstall
Run Code Online (Sandbox Code Playgroud)
这可能是双重杀伤,但至少当“升级”无法删除一些以前的库时它甚至有所帮助。