VS2008 编译错误 <winsock2.h>
Posted
技术标签:
【中文标题】VS2008 编译错误 <winsock2.h>【英文标题】:VS2008 Compile error with <winsock2.h> 【发布时间】:2010-10-31 02:19:09 【问题描述】:在尝试编译包含 <winsock2.h>
的 VS2008 c++ 项目时,出现大量 (105) 重定义和语法错误。运行 Windows 7 64 位。
我用谷歌搜索过,答案似乎很统一,但似乎对我不起作用。
尝试将#include <winsock2.h>
放在#include <windows.h>
之前。也试过不包括<windows.h>
(因为winsock2如果缺少它会自动包括它)。
之前尝试过#define WIN32_LEAN_AND_MEAN
和/或#define _WINSOCKAPI_
。
在链接器 -> 其他依赖项中,我引用了 ws2_32.lib。
也试过#pragma comment(lib, "ws2_32.lib")
。
我重建整个解决方案以防万一。
常见错误(似乎很多人都有):
Error 5 error C2011: 'sockaddr' : 'struct' type redefinition c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 206 RallyAction
Error 6 error C2143: syntax error : missing '' before 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction
Error 7 error C2143: syntax error : missing ';' before 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction
Error 8 error C2059: syntax error : 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction
...等等等等。
任何建议将不胜感激。
【问题讨论】:
【参考方案1】:我有一个“WinsockWrapper.h”标头,它可以帮助我确保一致性……它的要点是;
#ifndef _WINDOWS_
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
在任何可能需要 winsock2.h 的文件中引入 windows.h 的任何其他内容之前包含此内容
恕我直言,这意味着将其放在需要 winsock2.h 的大多数文件的顶部 ...
确保你的预编译头文件,如果你正在使用它,也有这个。
【讨论】:
【参考方案2】:这是一个众所周知的问题。不知何故,MS 使 winsock.h 和 winsock2.h 不兼容。从 MSVC 6 开始就存在这个问题。
它只是您包含的文件之一,还包含winsock.h,而您稍后包含winsock2.h
解决此问题的方法之一是首先包含 winsock2.h。甚至在 windows.h 之前(它会自动包含 windows.h)
【讨论】:
【参考方案3】:原来
我用
include
【讨论】:
以上是关于VS2008 编译错误 <winsock2.h>的主要内容,如果未能解决你的问题,请参考以下文章
VS2008 编译时出现的错误:无法打开编译器中间文件。如何解决?
VS2008(C++)-控制台项目中LNK2005错误的问题