0

我决定是时候学习 C++ 了,经过 3 个多小时的努力试图让编译器工作,我终于创建了一个工作程序。但是,当我尝试在 Eclipse 中通过剪切和粘贴来重构项目时,它似乎自发地崩溃了。程序直接崩溃,Windows 弹出可怕的对话框“HelloWorld.exe 已停止工作”。一些调试表明“cout”被认为是一个非法参数。我对这个问题进行了更多研究,现在我怀疑它与编译器显然是 32 位有关,因为我有一个 64 位系统。可执行文件在 Eclipse 中列为“HelloWorld.exe - [x86/le]”。(减去句号。)我的完整程序如下:

#include <iostream>

using namespace std;

int main(){
    cout << "Hello World!" << endl;
    return 0;
}

我还刚刚发现,在 Eclipse 中创建一个新的“HelloWorld”C++ 项目绝对无法解决问题,即使使用未修改的代码和设置也是如此。有人对为什么会发生这种情况有任何建议吗?

编辑:调试信息:运行程序时:

Hello World!
Program received signal SIGNILL, Illegal instruction.
0x6fccc3c0 in libstdc++-6!_ZSt4cout ()
    from C:\Windows\SysWOW64\libstdc++-6.dll
(gdb) bt
#0   0x6fccc3c0 in libstdc++-6~_ZSt4cout ()
    from C:\Windows\SysWOW64\libstdc++-6.dll
#1   0x6fc8908c in libstdc++-6~_ZSt4cout ()
    from C:\Windows\SysWOW64\libstdc++-6.dll
#2   0x004013be in libstdc++-6~_ZSt4cout () at HelloWorld.cpp:4
(gdb)

应该注意的是,类的第 4 行现在指向 cout 调用。

4

2 回答 2

3

查看您的 gdb 回溯后,问题似乎是不兼容的 C++ 运行时libstdc++.dll

如果您在现有安装上安装 MinGW,则可能会发生这种情况。另一种可能发生这种情况的方式是,如果其他第三方程序需要libstdc++.dll将其依赖项安装到您的Windows\SysWow64系统中,以便在系统范围内找到它。问题当然是,不同版本的libstdc++ABI 级别彼此不兼容。使用给定 Mingw g++ 版本编译的程序需要加载该特定 Mingw 安装附带的对应程序。 libstdc++.dll

打开一个新的 cmd.exe 提示符并将Path 环境设置为您当前的mingw\bin安装目录。例如,如果您的 mingw 安装在c:\mingw32-4.7.2

C:\>set path=C:\mingw32-4.7.2\bin

然后尝试再次运行 helloworld.exe。如果它运行完成而没有崩溃,那么这很可能是问题所在。在这种情况下,您应该从windows\syswow64.

于 2013-08-10T04:46:59.983 回答
2

静态构建它,因此您不必担心错误的依赖关系。只需将“-static”添加到您的编译器选项中。

于 2014-04-18T08:29:00.100 回答