首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用带有“非法参数”的C++ HelloWorld程序编译MinGW崩溃

用带有“非法参数”的C++ HelloWorld程序编译MinGW崩溃
EN

Stack Overflow用户
提问于 2013-08-10 00:27:39
回答 2查看 5.5K关注 0票数 0

我决定是时候学习C++了,在努力让编译器工作的3+小时之后,我终于创建了一个工作程序。然而,当我试图通过剪切和粘贴来重构Eclipse中的项目时,它似乎自发地崩溃了。这个程序简单的崩溃了,Windows打开了可怕的对话"HelloWorld.exe已经停止工作“。一些调试表明,"cout“被认为是非法的论点。我进一步研究了这个问题,现在我怀疑这与编译器显然是32位有关,因为我有一个64位的系统。该可执行文件在Eclipse中被列出为"HelloWorld.exe -x86/le“。(减去期间)我的节目全文如下:

代码语言:javascript
复制
#include <iostream>

using namespace std;

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

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

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

代码语言:javascript
复制
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调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-10 04:46:59

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

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

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

代码语言:javascript
复制
C:\>set path=C:\mingw32-4.7.2\bin

然后再试着运行helloworld.exe。如果它在没有崩溃的情况下运行到完成,那很可能就是问题所在。在这种情况下,您应该从libstdc++.dll中删除windows\syswow64

票数 3
EN

Stack Overflow用户

发布于 2014-04-18 08:29:00

静态构建它,这样您就不必担心错误的依赖。只需在编译器选项中添加"-static“即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18157464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档