采取这个简单的程序

#include <stdio.h>
#include <string.h>
#include <errno.h>

int
main (void)
{
  printf ("ERROR %d %s\n", ETIMEDOUT, strerror (ETIMEDOUT));
  return 0;
}

如果您使用Cygwin gcc进行编译,则可以正常运行
$ gcc a.c

$ ./a
ERROR 116 Connection timed out

如果使用MinGW-w64 gcc进行编译,则不会给出正确的错误消息
$ i686-w64-mingw32-gcc a.c

$ ./a
ERROR 138 Unknown error

我如何获得MinGW-w64来放置正确的错误消息?

最佳答案

ETIMEDOUT似乎是ISO C标准errno.h的POSIX扩展。与MinGW相比,Cygwin对POSIX的支持更好。已在2007中打开和关闭有关mingw32的ETIMEDOUT的错误报告。

一种选择是使用GNU可移植性库(Gnulib)。它提供了类似POSIX的errno.hstrerror()/strerror_override()

关于c - MinGW-w64引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13523532/

10-10 08:59