C++ hello world的调试构建崩溃,具体取决于优化级别
当我进行调试构建时,这个简单的hello world程序(取自eclipse)在退出时崩溃:C++ hello world的调试构建崩溃,具体取决于优化级别,c++,gcc,mingw,windows-8.1,C++,Gcc,Mingw,Windows 8.1,当我进行调试构建时,这个简单的hello world程序(取自eclipse)在退出时崩溃: #include <iostream> using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0; } 当我运行test.exe时,控制台将打开(带有消息),但我也会收到一条崩溃消息(test
#include <iostream>
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
当我运行test.exe时,控制台将打开(带有消息),但我也会收到一条崩溃消息(test.exe已停止工作),错误代码为0xc0000005(访问冲突)。现在,如果我用-O1而不是-O0编译同一个文件,那么生成的可执行文件运行时不会出现问题。我运行的是Windows8.1(64位),可执行文件是32位,我使用的是mingw,g++版本是4.8.1
有人知道是什么原因导致了这个问题吗?如果在这样一个简单的代码上有问题,那么很可能是这个版本的mingw中有一个bug,它使用了这组编译器键。在mingw支持中编写有关此行为的内容可能会很有用。因为这是一个很短的程序,所以查看程序集可能会很有用。就ur mingw而言,它是64位还是32位?mingw安装是32位。使用
g++-O0-g3-S main.cpp
获取程序集,它将保存在名为main.S的文件中,并发布到此处。是没有g3的版本(因为它增加了6000多行调试内容)。我发现这次崩溃与endl有关(请参阅)。你可能是对的,我在他们的bugtracker中搜索了一下,找到了相似的,可能相同的。我尝试从我的代码中删除std::endl,即使使用-O0,它也运行得很好,所以这似乎有问题。当我能够缩小搜索范围时,我发现了这个问题,解决方法似乎是静态链接std库。
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp"
g++ -o test.exe main.o