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

以下是出错后的错误信息:
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : warning C4005: “AF_IPX”: 宏重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“AF_IPX”的前一个定义
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : warning C4005: “AF_MAX”: 宏重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“AF_MAX”的前一个定义
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : warning C4005: “SO_DONTLINGER”: 宏重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“SO_DONTLINGER”的前一个定义
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C2011: “sockaddr”: “struct”类型重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“sockaddr”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C2143: 语法错误 : 缺少“}”(在“常量”的前面)
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C2143: 语法错误 : 缺少“;”(在“常量”的前面)
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C2059: 语法错误 : “常量”
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h() : error C2011: “sockaddr_in”: “struct”类型重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“sockaddr_in”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2011: “fd_set”: “struct”类型重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“fd_set”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : warning C4005: “FD_SET”: 宏重定义
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“FD_SET”的前一个定义
...(太多了 不贴了)
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSASetLastError”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAGetLastError”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAGetLastError”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAIsBlocking”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAIsBlocking”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAUnhookBlockingHook”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAUnhookBlockingHook”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSASetBlockingHook”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSASetBlockingHook”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSACancelBlockingCall”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSACancelBlockingCall”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAAsyncGetServByName”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAAsyncGetServByName”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAAsyncGetServByPort”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAAsyncGetServByPort”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAAsyncGetProtoByName”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAAsyncGetProtoByName”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAAsyncGetProtoByNumber”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAAsyncGetProtoByNumber”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAAsyncGetHostByName”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAAsyncGetHostByName”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : error C2375: “WSAAsyncGetHostByAddr”: 重定义;不同的链接
> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h() : 参见“WSAAsyncGetHostByAddr”的声明
>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h() : 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

winsock.h与winsock2.h出现重定义或不同的链接的更多相关文章

  1. 【VS开发】winsock 错误多 windows.h和winsock2.h的顺序

    Windows平台下用C++做网络开发很多时候都会同时包含这两个头文件,如若顺序不当(windows.h先于winsock2.h)就会出现很多莫名其妙的错误.诸如: c:\program files ...

  2. 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

    解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...

  3. VS2013使用winsock.h和winsock2.h发生冲突后的终极解决方法

    问题:彻底无语了,不小心某个文件包含了windows.h头文件,而windows.h文件里面包含着winsock.h文件, 如果你下次使用winsock2.h文件时,位置不对,然后编译器会给你一大堆重 ...

  4. windows.h和winsock2.h包含顺序问题(转)

    windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问 ...

  5. windows.h和WinSock2.h出现重定义API

    有两种常用的解决方法:1.把WinSock2.h写在windows.h之前   2.使用宏定义#define WIN32_LEAN_AND_MEAN

  6. windows.h与winsock2.h的包含顺序

    #define WIN32_LEAN_AND_MEAN #include <windows.h>

  7. 编译错误:warning C4005]ws2def.h(91): warning C4005: “AF_IPX”: 宏重定义 winsock.h(460) : 参见“AF_IPX”的前一个定义

    [问题] ws2def.h(91): warning C4005: “AF_IPX”: 宏重定义: winsock2.h(460) : 参见“AF_IPX”的前一个定义 [原因] windows.h头 ...

  8. sockaddr struct 类型重定义

    windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问 ...

  9. “sockaddr”: “struct”类型重定义的错误的解决办法《转》

    原帖地址:https://blog.csdn.net/clever101/article/details/100163301 windows.h和winsock2.h存在有类型重定义,往往体现在VC程 ...

随机推荐

  1. Python 文件 readline() 方法

    描述 Python 文件 readline() 方法用于从文件读取整行,包括 "\n" 字符.如果指定了一个非负数的参数,则返回指定大小的字符数,包括 "\n" ...

  2. elasticsearch 小试牛刀

  3. JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象

    数组的增删改 1.新增一项可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组 let a = [0, 1, 2] let b = a.concat([3]) console.log ...

  4. js中多个数字运算后值不对(失真)处理方法

    最近遇到一个bug ,在js里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.89,领导不乐意了说怎么少了0.01,我一听,噶卵达,来达鬼,不可能啊,我Goog ...

  5. c语言实现xor加密

    异或运算:^ 定义:它的定义是:两个值相同时,返回false,否则返回true.也就是说,XOR可以用来判断两个值是否不同. 特点:如果对一个值连续做两次 XOR,会返回这个值本身. ^ // 第一次 ...

  6. Atitti 住房部建设指南

    Atitti 住房部建设指南 1. 住房部建设的重要意义2 2. 房屋选址::首要核心要素,环境环境环境!!!2 2.1. 价格要素与地段..2 2.2. 与工作地距离,一般是半小时到一个半小时为好3 ...

  7. Mysql数据库If语句的使用

    MySQL的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 [sql] view plain copy 如果 expr1 是TRUE (expr1 & ...

  8. Redis source code analysis

    http://zhangtielei.com/posts/blog-redis-dict.html http://zhangtielei.com/assets/photos_redis/redis_d ...

  9. setRequestedOrientation

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//通过程序改变屏幕显示的方向 1.landscape:横屏(风景 ...

  10. 【嵌入式】arm-linux-gcc/ld/objcopy/objdump参数概述

    arm-linux-gcc -o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件   -Wall 指定产生全部的警告信息   -O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项 ...