2012-11-23 2 views
5

은 당신이는 MinGW-W64의 GCC로 컴파일하면strerror는

$ gcc a.c 

$ ./a 
ERROR 116 Connection timed out 

좋은 것은 그것이 제대로 제공하지 않습니다 실행이 간단한 프로그램

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

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

를 타고 오류 메시지

$ i686-w64-mingw32-gcc a.c 

$ ./a 
ERROR 138 Unknown error 

어떻게하면 MinGW-w64에 올바른 오류 메시지를 표시 할 수 있습니까?

+1

'ETIMEDOUT'에 대한 몇 가지 추가 정보 : MinGW 설치 중 적어도 하나는 아직 정의되지 않은 경우'138 '대신'10060 '(WSAETIMEDOUT와 동일)으로 정의됩니다. 나는 이것이 유산 (winsock.h)이 그것을하기 위해 사용 되었기 때문에 이것이라고 생각한다 (그러나 더 이상은 아니다). Boost는 컴파일러의'cerrno'가 이미 정의하지 않았다면'9938'으로 정의 할 것입니다 - VS2010까지 MSVC에서 시작되지 않았습니다. 그래서 저는 여러분이 프로그램을 컴파일하기까지하는 것이 조금 운이 좋았다고 생각할 수도 있다고 말하고 싶습니다. –

+0

@MichaelBurr - WinSock은 http://www.sockets.com/err_lst1.htm#WSAETIMEDOUT에 따라 버클리 소켓에서 WSAETIMEDOUT (10060)을 빌려 왔습니다. –

답변

2

ETIMEDOUT은 ISO C 표준 errno.h의 확장자 인 POSIX 인 것처럼 보입니다. Cygwin은 MinGW보다 POSIX를 더 잘 지원합니다. mingw32에 대한 ETIMEDOUT에 대한 버그 보고서가 열리고 닫혔습니다. 2007.

한 가지 옵션은 GNU 이식성 라이브러리 (Gnulib)를 사용하는 것입니다. POSIX와 같은 errno.hstrerror()/strerror_override()을 제공합니다.