使用MinGW编译的C ++ HelloWorld程序与“非法参数”崩溃(C++ HelloWorl

2019-10-30 08:06发布

我觉得是时候,我学会了C ++和挣扎3+小时试图让编译器的工作后,我终于创建了一个工作计划。 然而,当我试图通过剪切和粘贴重构Eclipse中的项目它看似自发的爆发。 该方案只是崩溃,和Windows带来了可怕的对话“HelloWorld.exe的已停止工作。” 调试有点透露,“COUT”被认为是非法的说法。 我看了一些到这个问题,我现在怀疑它是与编译器显然是32位的,因为我有一个64位系统。 可执行文件在Eclipse列为 “HelloWorld.exe的 - [86 / LE]”。 (减去期。)我在整个方案低于:

#include <iostream>

using namespace std;

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

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

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

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通话。

Answer 1:

看着你的GDB回溯后,这个问题似乎是一个不兼容的C ++运行时libstdc++.dll

如果你在现有的安装安装MinGW的这种情况可能发生。 这可能发生的另一种方式是,如果一些其它第三方程序需要libstdc++.dll安装它的依赖到您Windows\SysWow64所以可以发现系统范围。 问题是,当然,在不同版本libstdc++是不能互相兼容的ABI水平。 与给定的MinGW的g ++版本编译的程序需要加载相应 libstdc++.dll与特定的MinGW来安装。

打开一个新的CMD.EXE的提示和道路环境设置为您当前mingw\bin安装目录。 例如,如果你的MinGW安装在c:\mingw32-4.7.2

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

然后再次尝试HelloWorld.exe的运行。 如果它运行到完成,而且没有再崩溃是有可能的问题。 在这种情况下,你应该删除的libstdc ++。dll的,从windows\syswow64



Answer 2:

建立它静态,所以你不必担心错误depencies。 只需添加“-static”你的编译器选项。



文章来源: C++ HelloWorld program compiled with MinGW crashes with “Illegal Argument”