使用MinGW-w64的strerror

5 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;
}
Run Code Online (Sandbox Code Playgroud)

如果你使用Cygwin gcc编译它运行正常

$ gcc a.c

$ ./a
ERROR 116 Connection timed out
Run Code Online (Sandbox Code Playgroud)

如果使用MinGW-w64 gcc编译它,它不会给出正确的错误消息

$ i686-w64-mingw32-gcc a.c

$ ./a
ERROR 138 Unknown error
Run Code Online (Sandbox Code Playgroud)

如何让MinGW-w64输入正确的错误信息?

Dav*_* L. 2

ETIMEDOUT似乎是ISO C 标准 errno.h 的POSIX扩展。Cygwin 对 POSIX 的支持比 MinGW 更好。关于 mingw32 的错误报告于2007 年ETIMEDOUT开放并关闭。

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