std :: endl崩溃使用MinGW编译的Windows 8

 pokiyo6836 发布于 2023-02-10 08:14

我有3台计算机,其中两台使用Windows 8.使用最新版本的MinGW的g ++(4.8.1-4),我的hello world程序会在我在Windows 8计算机上编译和运行时冻结,但不会在Windows 7中运行.

#include 
int main()
{
    std::cout << "Hello, World!" <

这在g ++中编译得很好,但运行a.exe会显示"Hello,World!" 然后会弹出一个窗口并说"a.exe已停止工作,Windows可以在线检查程序的解决方案......"等.

有没有人见过这个问题.

另外,我试过"std :: cout <<"Hello,World!\n"<< std :: flush;" 这也有同样的问题.似乎每个刷新缓冲区的函数都会导致崩溃.

按照Eric的建议,我重新编译了程序并在gdb中运行它并得到以下输出:

Program received signal SIGILL, Illegal instruction. 
0x00405065 in _Jv_RegisterClasses ()

Clifford.. 6

在第二个实例中,'\n'应该在任何情况下都会导致输出刷新,尽管在Windows中我认为控制台输出是立即的(或者在短暂超时之后可能是自动的),在任何情况下都没有显式刷新.

我建议进行以下实验:

1)通过使用C库查看它是否特定于C++库(在MinGW中使用Microsoft的C运行时而不是glibc):

#include 
int main()
{
    printf( "Hello, World!\n" ) ;
    return 0;
}

2)通过以下方式消除退出代码:

int main()
{
    return 0;
}

3)根本没有新行:

#include 
int main()
{
    std::cout << "Hello, World! ;
    return 0;
}

4)尝试不同的编译器选项,例如优化级别,或者-fno-builtin例如,或者建议在这里:-static-libgcc -static-libstdc++(虽然我怀疑``-static-libgcc`本身会产生什么影响,因为MinGW的使用Microsoft的C运行时DLL和静态库仅适用用微软的工具).

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有