2014-02-25 3 views
0

mingw + msys를 사용하여 APP를 작성하려고합니다.Windows에서 getaddrinfo()를 사용하는 방법

내 코드는 winsock을 사용합니다. 내가 그것을 컴파일 할 때 나는 오류 메시지가 다음 걸릴 :

$ gcc -o sample sample.c -lws2_32 
    C:\Users\user\AppData\Local\Temp\ccsdWlQR.o:sample.c:(.text+0xeb): undefined reference to `getaddrinfo' 
    collect2.exe: error: ld returned 1 exit status 

이 어떤 헤더를 변경 리눅스에서 마이그레이션 내 코드입니다.

#include <stdio.h> 
#include <WinSock2.h> 
#include <WS2tcpip.h> 

main(int argc,char *argv[]) 
{ 
    WSADATA wsaData; 
    WSAStartup(MAKEWORD(2,2), &wsaData); 

    printf("Hello world with winsock"); 

    int sock; 
    char *hostAddress; 
    struct addrinfo hints,*res; 
    int err; 
    memset(&hints,0,sizeof(hints)); 
    hints.ai_family = AF_UNSPEC; 
    hints.ai_socktype = SOCK_DGRAM; 
    getaddrinfo("127.0.0.1",12345,&hints,&res); 

    printf("getaddrinfo %s\n",strerror(errno)); 
    printf("getaddrinfo : %s \n",gai_strerror(err)); 


    struct sockaddr_in *addr; 
    struct addrinfo *rp; 
    for (rp = res; rp != NULL; rp = rp->ai_next) { 
     addr = (struct sockaddr_in *)rp->ai_addr; 
     printf("dstPort = %d\n",ntohs(addr->sin_port)); 
     printf("dstAddr = %s\n",inet_ntoa((struct in_addr)addr->sin_addr)); 
     hostAddress = inet_ntoa((struct in_addr)addr->sin_addr);  
    } 
    WSACleanup();          

} 

Windows에서 gettarrinfo()은 어떻게 사용할 수 있습니까?

dgreenday의 글을 읽은 후 메시지가 변경된다는 추가 정보입니다.

sample.c:22:2: warning: passing argument 2 of 'getaddrinfo' makes pointer from i 
nteger without a cast [enabled by default] 
    getaddrinfo("124.0.0.1",12345,&hints,&res); 
^
In file included from sample.c:4:0: 
c:\mingw\include\ws2tcpip.h:391:12: note: expected 'const char *' but argument i 
s of type 'int' 
int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*, 
+1

동일한 질문은 여기에 있습니다 : http://stackoverflow.com/questions/5220190/undefined-reference-to-getaddrinfo – dgreenday

+0

나는이 사이트가 말한 것처럼 Ws2_32.Lib를 연결하고'#define _WIN32_WINNT 0x0501'을 추가하려고했습니다. 오류 마사지가 변경되었습니다. – user1345414

답변

2

나는 당신이 단순히 날짜 SDK의 부족을 의심하고 SDK에서 제공되는 가져 오기 라이브러리는 getaddrinfo 포함되지 않습니다. 당신의 프로그램은 당신이 내 시스템에 링크를 잘 묘사하는 방식으로 컴파일됩니다.

mingw 시스템을 업데이트하거나 getaddrinfo을 포함하는 가져 오기 라이브러리를 만드십시오.

getaddrinfo("124.0.0.1",12345,&hints,&res); 

가 있어야한다 : 것을

getaddrinfo("124.0.0.1","12345",&hints,&res); 

그리고 올바르게 오류를 검사하지 않습니다. getaddrinfo에 의해 반환 된 값을주의해야합니다. 이를 무시하고 errno을 확인하는 것은 적절하지 않습니다.

+0

'getaddrinfo ("124.0.0.1", "12345", & hints, &res);'에 고정되어 잘 진행되었습니다. – user1345414