VS2008 编译错误 <winsock2.h>

Posted

技术标签:

【中文标题】VS2008 编译错误 <winsock2.h>【英文标题】:VS2008 Compile error with <winsock2.h> 【发布时间】:2010-10-31 02:19:09 【问题描述】:

在尝试编译包含 &lt;winsock2.h&gt; 的 VS2008 c++ 项目时,出现大量 (105) 重定义和语法错误。运行 Windows 7 64 位。 我用谷歌搜索过,答案似乎很统一,但似乎对我不起作用。

尝试将#include &lt;winsock2.h&gt; 放在#include &lt;windows.h&gt; 之前。也试过不包括&lt;windows.h&gt;(因为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】:

原来 在项目的其他地方(单独的 .h 文件)和上述 .h 文件之前被调用。这就是我迟到的编码。感谢您的帮助,不胜感激。

我用 替换了那个 调用,现在它工作正常。

include 之后随机开始给我带来问题(每隔一个编译)。我用#ifdef _WIN32 封装了它,但它仍然看起来是随机的。在上次成功编译(每隔一次)并重新启动 VS2008 之后保存项目似乎已经“修复”了它。该错误是内部链接器错误(引用了 mms 库)。

【讨论】:

以上是关于VS2008 编译错误 <winsock2.h>的主要内容,如果未能解决你的问题,请参考以下文章

VS2008 编译时出现的错误:无法打开编译器中间文件。如何解决?

VS2008(C++)-控制台项目中LNK2005错误的问题

VS2008 编译出错,求救中...

如何在 VS 2010 中出现第一个错误时停止 C# 编译(VS 2008 宏不起作用)!

怎么让vs2008编译仅弹出错误列表?

vs2008编译错误fatal error C1902: 程序数据库管理器不匹配;请检查安装解决