Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
winsock编译错误_C_Winsock_Winsock2 - Fatal编程技术网

winsock编译错误

winsock编译错误,c,winsock,winsock2,C,Winsock,Winsock2,以下错误来自仅包含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\Desk

以下错误来自仅包含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之前定义WINSOCKAPI来防止第一次包含。h:

:


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

#include <winsock2.h>
#include <windows.h>
#包括
#包括
您还可以使用“精益”和“平均”宏:

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
\ifndef WIN32\u LEAN\u和\u MEAN
#定义WIN32_精益_和_平均值
#恩迪夫
#包括
#包括
msdn中描述了原因:

还要确保将程序链接到WS2_32.lib文件(这取决于您使用的IDE,例如Visual Studio?)
在Visual Studio中,您可以转到项目>属性>链接器>附加包含(或类似的内容,目前不在使用Visual Studio的计算机上…)上面的链接中也介绍了这一点

#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")

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

这与DLL无关。你能发布你的代码吗?试着在windows之前包含winsock2.h。不要移动winsock.dll。这是Windows的一部分。您可能发现的任何建议都可以追溯到Windows 3.1的时代。就这点而言,winsock.dll也是如此——我的意思是,它可以追溯到Windows3.1;在32位平台上,可以使用wsock32.dll(Winsock 1.1)或ws2_32.dll(Winsock 2.x)。正如杜拉塞尔所说,你的问题是其他的。非常感谢。更改头的顺序包括修复编译错误。再次感谢你。ioil
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")