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程 ...
随机推荐
- SteveY对Amazon和Google平台的吐槽
Steve Yegge, Amazon的前员工,现任Google员工,其本来想在Google+上和Google的员工讨论一些关于平台的东西,结果不小心把圈子设成了Public,结果这篇文章就公开给了全 ...
- Web用户控件开发--星型评分控件
本文中分享一个实现简单,使用方便的星型评分控件. 一:贴几张测试图片先: 二.星型评分控件的实现: RatingBar.ascx: <%@ Control Language="C#&q ...
- Redis命令汇总
设置服务后台启动 cd /usr/local/redisview redis.conf 将daemonize no改为 daemonize yes保存退出 启动:./reids-server redi ...
- Win 10服务智能化有什么依据?
在今年7月29日之后.Win 10操作系统就叫"视窗服务"了,当中有没有"智能'因素呢?能不能叫做"智能操作系统"呢?为什么?什么是& ...
- iOS底层原理总结 - 探寻block的本质(一)
面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMu ...
- 不错位的java .class 反编译工具推荐
我们经常会反编译看一些class文件,但是反编译出来的文件里面会有很多杂乱的东西 一直以来都是用的idea来反编译的,只要把class文件往里面一拖就行了 这么用没问题,用来看看源码什么的都OK 但是 ...
- python中包含UTF-8编码中文的列表或字典的输出
在python 下面一个包含中文字符串的列表(list)或字典,直接使用print会出现以下的结果: >>> dict = {"asdf": "我们的p ...
- C#中int、long、float、double、decimal最大值最小值
最近在将java上写的一个简单的表达式求值计算器移植到Windows Phone 8,java中double的精度问题是很明显的,解决办法是改用BigDecimal类.所以觉得C#中用double也是 ...
- 制做rpm包工具fpm安装
安装ruby模块 [root@c01 ~]# yum install ruby rubygems ruby-devel -y # 查看当前使用的rubygems仓库 [root@c01 ~]# gem ...
- Fluent UDF【4】:C语言
Fluent UDF利用的是C语言,本文简单介绍在UDF中经常会用到的C语言常识. 本文部分内容来自UDF手册. 1 C语言中的注释 C语言中的注释利用/*及*/来实现.例如: /*这是一个注释*/ ...