应用程序分段故障,仅在使用MinGW在Windows上进行编译时

时间:2014-04-30 15:55:39

标签: c++ windows gcc mingw sigsegv

我试图在Windows上编译one of my games,但不幸的是,无论如何,每次运行程序时我都会遇到此分段错误。

编译成功,没有任何警告。

  

编程接收信号SIGSEGV,分段故障。

     

__ chkstk_ms()at ../../../../../ src / gcc-4.8.1 / libgcc / config / i386 / cygwin.S:172

     

172 ../../../../../src/gcc-4.8.1/libgcc/config/i386/cygwin.S:没有这样的文件或目录。

我试过了:

  • 在Windows x86计算机上进行编译
  • 在Windows x64计算机上进行编译
  • nuwen.net的MinGW发行版
  • TDM MinGW 4.8.1 SJLJ
  • MinGW构建x86 SJLJ
  • MinGW构建x64 SJLJ
  • MinGW构建x86 DW2

我已多次从源构建所有依赖项,尝试静态和动态链接。

调试也没有帮助--GDB在输入main()时就给我提供了错误消息。我使用过-g3-O0个标记。

我怎样才能弄清楚发生了什么?

2 个答案:

答案 0 :(得分:3)

在Windows上,默认堆栈大小小于Linux。如果溢出堆栈,__ chkstk_ms似乎是一个崩溃的函数。

您可能会尝试找出代码中创建大量堆栈变量或执行非常深度递归的位置,然后解决此问题。

或者,您可以添加编译标志以增加堆栈大小。见http://trac.sagemath.org/ticket/13960

答案 1 :(得分:1)

尝试增加堆栈大小。不要问我怎么样,我不知道。

失败的调用(__chkstk_ms)看起来像内部例程,它检查是否有足够的堆栈空间用于即将执行的函数。