在MinGW上隐式声明函数'getaddrinfo'

ano*_*ard 5 c winapi mingw winsock2 getaddrinfo

我有一个使用的C程序getaddrinfo().它在Linux和Mac OS X上按预期工作.

我正在将它移植到Windows.

当我编译它(使用MinGW gcc)时,我收到以下警告:

ext/socket/socket.c: In function 'sl_tcp_socket_init':
ext/socket/socket.c:98:5: warning implicit declaration of function 'getaddrinfo' [-Wimplicit-function-declaration]
ext/socket/socket.c:104:9: warning implicit declaration of function 'freeaddrinfo' [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

然后整个事情无法链接到未定义的引用getaddrinfo()freeaddrinfo().

现在,根据这个MSDN页面,getaddrinfo()Windows支持并位于头文件Ws2tcpip.h和库文件中Ws2_32.lib.

我包括Ws2tcpip.h并链接-lWs2_32,所以我不确定为什么这不起作用.

enh*_*lep 10

如果您查看ws2tcpip.h的第297行,您可以看到_WIN32_WINNT的值已经检查过.

#if (_WIN32_WINNT >= 0x0501)
void WSAAPI freeaddrinfo (struct addrinfo*);
int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*,
                struct addrinfo**);
int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD,
               char*,DWORD,int);
#else
/* FIXME: Need WS protocol-independent API helpers.  */
#endif
Run Code Online (Sandbox Code Playgroud)

只需_WIN32_WINNT在你的包含之前#define .