zoukankan      html  css  js  c++  java
  • winsock.h与winsock2.h出现重定义或不同的链接

    经常遇到编译socket程序的时候生成几百个错误

    以下是出错后的错误信息:
    >c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(91) : warning C4005: “AF_IPX”: 宏重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(460) : 参见“AF_IPX”的前一个定义 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(127) : warning C4005: “AF_MAX”: 宏重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(479) : 参见“AF_MAX”的前一个定义 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(163) : warning C4005: “SO_DONTLINGER”: 宏重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(402) : 参见“SO_DONTLINGER”的前一个定义 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(206) : error C2011: “sockaddr”: “struct”类型重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(485) : 参见“sockaddr”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(384) : error C2143: 语法错误 : 缺少“}”(在“常量”的前面) 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(384) : error C2143: 语法错误 : 缺少“;”(在“常量”的前面) 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(384) : error C2059: 语法错误 : “常量” 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(437) : error C2143: 语法错误 : 缺少“;”(在“}”的前面) 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:program filesmicrosoft sdkswindowsv6.0aincludews2def.h(437) : error C2011: “sockaddr_in”: “struct”类型重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(312) : 参见“sockaddr_in”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(132) : error C2011: “fd_set”: “struct”类型重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(68) : 参见“fd_set”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(167) : warning C4005: “FD_SET”: 宏重定义 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(102) : 参见“FD_SET”的前一个定义 ...(太多了 不贴了) 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(874) : 参见“WSASetLastError”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2197) : error C2375: “WSAGetLastError”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(876) : 参见“WSAGetLastError”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2214) : error C2375: “WSAIsBlocking”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(878) : 参见“WSAIsBlocking”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2231) : error C2375: “WSAUnhookBlockingHook”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(880) : 参见“WSAUnhookBlockingHook”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2248) : error C2375: “WSASetBlockingHook”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(882) : 参见“WSASetBlockingHook”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2265) : error C2375: “WSACancelBlockingCall”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(884) : 参见“WSACancelBlockingCall”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2287) : error C2375: “WSAAsyncGetServByName”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(886) : 参见“WSAAsyncGetServByName”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2314) : error C2375: “WSAAsyncGetServByPort”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(894) : 参见“WSAAsyncGetServByPort”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2340) : error C2375: “WSAAsyncGetProtoByName”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(902) : 参见“WSAAsyncGetProtoByName”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2365) : error C2375: “WSAAsyncGetProtoByNumber”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(909) : 参见“WSAAsyncGetProtoByNumber”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2390) : error C2375: “WSAAsyncGetHostByName”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(916) : 参见“WSAAsyncGetHostByName”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.h(2417) : error C2375: “WSAAsyncGetHostByAddr”: 重定义;不同的链接 1> c:program filesmicrosoft sdkswindowsv6.0aincludewinsock.h(923) : 参见“WSAAsyncGetHostByAddr”的声明 1>c:program filesmicrosoft sdkswindowsv6.0aincludewinsock2.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

  • 相关阅读:
    jquery 使用方法<转载>
    mybatis 使用resultMap实现数据库的操作
    myBatis 实现用户表增删查改操作<方法2 加入接口>(最终版)
    myBatis 实现用户表增删查改操作<方法1 没有使用接口的>(最终版)
    myBatis 实现用户表增操作(复杂型)
    MyBatis 用户表记录数查询
    SpringMVC 返回JSON数据
    springmvc中@PathVariable和@RequestParam的区别(百度收集)
    spring mvc文件上传和下载
    python 网络编程
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4677854.html
Copyright © 2011-2022 走看看