使用MinGW-w64的strerror

时间:2012-11-23 05:26:03

标签: c windows mingw-w64

采取这个简单的程序

#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输入正确的错误信息?

1 个答案:

答案 0 :(得分:2)

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

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