winsock.h与winsock2.h出现重定义或不同的链接
经常遇到编译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出现重定义或不同的链接的更多相关文章
- 【VS开发】winsock 错误多 windows.h和winsock2.h的顺序
Windows平台下用C++做网络开发很多时候都会同时包含这两个头文件,如若顺序不当(windows.h先于winsock2.h)就会出现很多莫名其妙的错误.诸如: c:\program files ...
- 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载
解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...
- VS2013使用winsock.h和winsock2.h发生冲突后的终极解决方法
问题:彻底无语了,不小心某个文件包含了windows.h头文件,而windows.h文件里面包含着winsock.h文件, 如果你下次使用winsock2.h文件时,位置不对,然后编译器会给你一大堆重 ...
- windows.h和winsock2.h包含顺序问题(转)
windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问 ...
- windows.h和WinSock2.h出现重定义API
有两种常用的解决方法:1.把WinSock2.h写在windows.h之前 2.使用宏定义#define WIN32_LEAN_AND_MEAN
- windows.h与winsock2.h的包含顺序
#define WIN32_LEAN_AND_MEAN #include <windows.h>
- 编译错误: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头 ...
- sockaddr struct 类型重定义
windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问 ...
- “sockaddr”: “struct”类型重定义的错误的解决办法《转》
原帖地址:https://blog.csdn.net/clever101/article/details/100163301 windows.h和winsock2.h存在有类型重定义,往往体现在VC程 ...
随机推荐
- Python控制台输出带颜色的文字(高亮显示)方法
在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想要的信 ...
- Python 文件 next() 方法
描述 Python 3 中的 文件 对象不支持 next() 方法. Python 3 的内置函数 next() 通过迭代器调用 __next__() 方法返回下一项. 在循环中,next()方法会在 ...
- 使用C#WebClient类访问(上传/下载/删除/列出文件目录)
在使用WebClient类之前,必须先引用System.Net命名空间,文件下载.上传与删除的都是使用异步编程,也可以使用同步编程, 这里以异步编程为例: 1)文件下载: static void Ma ...
- C#两个DataTable拷贝问题:该行已经属于另一个表的解决方法
一.DataTable.Rows.Add(DataRow.ItemArray); 二.DataTable.ImportRow(DataRow) 三.设置DataTable的tablename,然后.R ...
- 关于Big Endian 和 Little Endian
Big Endian 和 Little Endian 一.字节序 来自:http://ayazh.gjjblog.com/archives/1058846/ 谈到字节序的问题,必然牵涉到两大CPU派系 ...
- Fast Algorithm To Find Unique Items in JavaScript Array
When I had the requirement to remove duplicate items from a very large array, I found out that the c ...
- Android studio界面相关设置
用惯了emacs的操作方式,每当使用一款新的编辑器的时候,第一个想到的就是这个工具有没有emacs的快捷键,Android studio也是一样的. 1. Android studio设置emacs的 ...
- Create rolling monthly, weekly and daily Logstash indices
在刚刚开始接触ELK的时候我们习惯把每一个index都按照day来切割.但是我们会发现我们的shards 会很多. 其实我们一该把那些小的index按照一周或者一个月来rolling,来减少我们的sh ...
- 解决Maven->update project 恢复为默认jdk1.5以及One or more constraints have not been satisfied问题
使用maven架构创建dynamic web 项目之后,默认指定的jdk 和compilerVersion都非常古老,而且即便你手动更新了版本之后,每次update project都会复位,非常不爽. ...
- Android 控件: Webview 的一些知识点
WebView 加载网页,当点击返回键的时,会显示上一个页面,并刷新. 同时可以对返回上一个页面进行干预,就是用到了缓存. webview加载网页的几个模式,即websetting中设置的加载模式.w ...