std::endl 导致使用 MinGW 编译的 Windows 8 崩溃
std::endl crashes Windows 8, compiled using MinGW
我有3台电脑,其中两台使用Windows 8。使用最新版本的MinGW的g++(4.8.1-4),每当我在Windows 8计算机上编译和运行时,我的hello world程序都会冻结,但在Windows 7中则不然。
#include <iostream>
int main()
{
std::cout << "Hello, World!" <<std::endl;
return 0;
}
这在 g++ 中编译得很好,但运行 a.exe 将显示"Hello, World!"然后会弹出一个窗口并说"a.exe已停止工作,Windows 可以在线检查该程序的解决方案。等。
有没有人见过这个问题。
另外,我尝试了"std::cout <<"Hello, World!" <<std::flush;",这有同样的问题。似乎每个刷新缓冲区的函数都会导致崩溃。
按照 Eric 的建议,我重新编译了程序并在 gdb 中运行它,并得到了以下输出:
Program received signal SIGILL, Illegal instruction.
0x00405065 in _Jv_RegisterClasses ()
在第二个实例中,""在任何情况下都会导致输出刷新,尽管在 Windows 中我相信控制台输出在任何情况下都是即时的(或者可能在短时间超时后自动输出),而无需显式刷新。
我建议进行以下实验:
1) 使用 C 库查看它是否特定于C++库(在 MinGW 中Microsoft使用 C 运行时而不是 glibc):
#include <stdio.h>
int main()
{
printf( "Hello, World!n" ) ;
return 0;
}
2) 通过以下方式消除退出代码:
int main()
{
return 0;
}
3)完全没有换行符:
#include <iostream>
int main()
{
std::cout << "Hello, World! ;
return 0;
}
4)尝试不同的编译器选项,例如优化级别,或-fno-builtin
,或此处建议:-static-libgcc -static-libstdc++
(尽管我怀疑"-static-libgcc"本身会产生任何影响,因为MinGW使用Microsoft的C运行时DLL,并且静态库仅适用于Microsoft的工具)。
我遇到了同样的问题,经过长时间的痛苦搜索后发现,我的计算机上有多个版本的 mingw 提供了 libstdc++-6.dll。一个是mingw安装的一部分,其他是其他安装包(gnuplot和GIMP)的一部分。由于我的 PATH 中有 gnuplot,编译的 mingw exe 它将使用此 dll 的较旧、不兼容的版本并因所描述的症状而崩溃。因此,我可以证实迪特马尔·库尔的怀疑。如上所述,在这种情况下,静态链接库显然有帮助,因为库函数在编译时包含在 exe 中。
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 在Linux上交叉编译Windows应用程序时如何链接到Winsock?
- 如何在Visual Studio 2017中编译Windows XP的代码
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- 在 Linux 上编译 Windows 软件的 QT 5.x
- 在 Ubuntu 上使用 mingw 交叉编译 Windows 时缺少"libiconv.h"
- 交叉编译 - Windows 上的 V8 和 Linux
- 编译windows版本的一厢情愿
- 使用Linux C代码和标头文件来编译Windows DLL
- 如何使用VS2010编译Windows X64位的Leptonica库
- 如何使用Visual Studio 2012编译Windows XP
- 当静态库不可用时,是否可以从 Linux 交叉编译 Windows
- 可以用于编译Windows Vista或7的代码
- 在Linux中编译windows Qt代码以及库中的更改
- 在Visual Studio 2015中使用XP Targeting编译Windows XP时出现致命错误
- 微软c++编译器太烦人了!是否有一个替代的编译Windows 32/64位
- 如何在 Linux 上使用 DLL 编译 Windows 应用程序
- 编译windows phone 8的本机代码(c++)