首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >winsock编译错误

winsock编译错误
EN

Stack Overflow用户
提问于 2010-06-17 13:38:59
回答 3查看 3.1K关注 0票数 3

以下错误来自仅包含windows和winsock2的文件。

代码语言:javascript
复制
C:\Users\ioil\Desktop\dm\bin>dmc sockit.c
typedef struct fd_set {
                      ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(85) : Error: 'fd_set' is already defined
} fd_set;
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(88) : Error: identifier or '( declarator )' expected
struct timeval {
               ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(129) : Error: 'timeval' is already defined
};
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(132) : Error: identifier or '( declarator )' expected
struct  hostent {
                ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(185) : Error: 'hostent' is already defined
Fatal error: too many errors
--- errorlevel 1

C:\Users\ioil\Desktop\dm\bin>

已经尝试过的方法:将winsock.dll文件放置在与要编译的编译器和程序相同的目录中,将其放置在system32目录中,然后使用regsrv32命令将其输入注册表。我真的不知道下一步该怎么做,谢谢你的建议。。。

EN

回答 3

Stack Overflow用户

发布于 2010-06-17 13:46:02

windows.h包含winsock.h,它与winsock2.h包含文件冲突。通过在包含windows.h之前定义WINSOCKAPI来防止第一个包含:

代码语言:javascript
复制
#define _WINSOCKAPI_ 
#include "windows.h"
#include "winsock2.h"
票数 2
EN

Stack Overflow用户

发布于 2010-06-17 17:24:54

您应该按照IulianŞerbănoiu的建议将winsock2.h放在windows.h之前。

代码语言:javascript
复制
#include <winsock2.h>
#include <windows.h>

您还可以使用lean和mean宏:

代码语言:javascript
复制
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>

原因在msdn上描述:Creating a Basic Winsock Application

还要确保将程序链接到WS2_32.lib文件(这取决于您使用的集成开发环境,例如Visual Studio?)

在Visual Studio中,您可以转到Project > Properties > Linker > Additional includes (或类似的内容,此时不是在装有visual studio的计算机上)。上面的链接中也描述了这一点。

票数 2
EN

Stack Overflow用户

发布于 2011-02-22 14:24:17

代码语言:javascript
复制
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")

使用此选项可避免编译错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3059141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档