命名为文件“main000.cpp”的代码在Linux机器上使用后续命令行编译和执行:
g++ -std=c++11 -m32 -O0 main000.cpp ; ./a.out
并正常执行
如果编译并执行将O0更改为O1
g++ -std=c++11 -m32 -O1 main000.cpp ; ./a.out
不起作用并生成堆栈转储
任何知道原因的机构?
#include <stdio.h>
#include <string>
using namespace std;
typedef unsigned int Token;
const Token tokenBase=0x80000000;
enum classId{
classNoId=tokenBase,
classPrimitiveId,
};
struct classInfo{classId id;wstring name;};
classInfo classInfos[]={
{classNoId,L"classNoID"},
{classPrimitiveId,L"classPrimitiveId"},
};
int main(){
int id=classInfos[0].id;
return 0*id;
}
答案 0 :(得分:5)
对于-O1
和-O2
,这对我来说运行正常
因此,您的设置可能存在问题。我建议在gdb
内运行并获得backtrace
。
并确保您没有使用已定义的冲突标识符链接库。