【问题标题】:Simple program crashes简单的程序崩溃
【发布时间】:2012-08-12 03:21:47
【问题描述】:

所以我一直在使用 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 目录中列出的最新版本的二进制文件存在一些错误。

【问题讨论】:

  • 听起来你破坏了你的调试库。优化“解决”问题的事实意味着发布运行时库很好。但调试运行时库不知何故配置错误。
  • 但他说它在启用优化时崩溃。
  • 那么可能是 GCC 安装出了问题,可能是某些东西损坏了?我将重新下载并重新安装它,看看是否可以解决任何问题。
  • 是的,我也会这样做。如果完全干净的安装无法修复它,请尝试另一台机器。如果它重现,那么它可能是安装程序中的一个错误。
  • 我还是不明白为什么人们这么不愿意使用调试器。 gcc 甚至支持组合 -O 和 -g 开关,如果它与 MingW 的最新存储库版本一起崩溃,如果尚未由其他人完成,最好提交包含堆栈跟踪的错误报告。

标签: c++ gcc crash g++


【解决方案1】:

我遇到了非常相似的问题,发布版本很好,而调试版本被破坏了。解决方案是执行以下操作:

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

这可能是双杀,但至少在“升级”无法删除以前的一些库时它甚至有所帮助。

【讨论】:

  • 我尝试这样做,重新下载了最新版本的 gcc,并输入了这三个命令来更新、升级和重新安装。但是,它仍然会创建一个会崩溃的程序。到目前为止,我能够让它工作的唯一方法是使用“预打包的存储库目录”,这会导致安装 gcc 4.6.2 而不是 4.7.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2013-08-06
相关资源
最近更新 更多