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

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命令输入到注册表中。真的不知道从哪里开始,感谢任何建议。 . .

最佳答案

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

:

#define _WINSOCKAPI_
#include "windows.h"
#include "winsock2.h"

关于c - winsock编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3059141/

10-14 14:09