經常遇到編譯socket程序的時候生成幾百個錯誤
以下是出錯后的錯誤信息: >c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : 參見“AF_IPX”的前一個定義 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: “AF_MAX”: 宏重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : 參見“AF_MAX”的前一個定義 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: “SO_DONTLINGER”: 宏重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : 參見“SO_DONTLINGER”的前一個定義 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: “sockaddr”: “struct”類型重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : 參見“sockaddr”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 語法錯誤 : 缺少“}”(在“常量”的前面) 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 語法錯誤 : 缺少“;”(在“常量”的前面) 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: 語法錯誤 : “常量” 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: 語法錯誤 : 缺少“;”(在“}”的前面) 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少類型說明符 - 假定為 int。注意: C++ 不支持默認 int 1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2011: “sockaddr_in”: “struct”類型重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(312) : 參見“sockaddr_in”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(132) : error C2011: “fd_set”: “struct”類型重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(68) : 參見“fd_set”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(167) : warning C4005: “FD_SET”: 宏重定義 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(102) : 參見“FD_SET”的前一個定義 ...(太多了 不貼了) 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(874) : 參見“WSASetLastError”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2197) : error C2375: “WSAGetLastError”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(876) : 參見“WSAGetLastError”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2214) : error C2375: “WSAIsBlocking”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(878) : 參見“WSAIsBlocking”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2231) : error C2375: “WSAUnhookBlockingHook”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(880) : 參見“WSAUnhookBlockingHook”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2248) : error C2375: “WSASetBlockingHook”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(882) : 參見“WSASetBlockingHook”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2265) : error C2375: “WSACancelBlockingCall”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(884) : 參見“WSACancelBlockingCall”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2287) : error C2375: “WSAAsyncGetServByName”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(886) : 參見“WSAAsyncGetServByName”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2314) : error C2375: “WSAAsyncGetServByPort”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(894) : 參見“WSAAsyncGetServByPort”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2340) : error C2375: “WSAAsyncGetProtoByName”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(902) : 參見“WSAAsyncGetProtoByName”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2365) : error C2375: “WSAAsyncGetProtoByNumber”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(909) : 參見“WSAAsyncGetProtoByNumber”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2390) : error C2375: “WSAAsyncGetHostByName”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(916) : 參見“WSAAsyncGetHostByName”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2417) : error C2375: “WSAAsyncGetHostByAddr”: 重定義;不同的鏈接 1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(923) : 參見“WSAAsyncGetHostByAddr”的聲明 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2440) : error C2375: “WSACancelAsyncRequest”: 重定義;不同的鏈接
原因分析]
主要原因是因為<Windows.h>中包含了<Winsock.h>頭文件,由於其版本的不同
解決方案一: 添加預編譯頭
項目屬性 ——> C/C++ ———> 預處理器 -------> 預處理器定義
增加如下定義
WIN32_LEAN_AND_MEAN
解決方案二:
在編譯不過的頭文件前面增加
#include <Winsock2.h>
特別是用到了<windows.h>