winsock.h与winsock2.h出现重定义或不同的链接

经常遇到编译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>

 

https://blog.csdn.net/starelegant/article/details/72460728

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值