Winsock2.h:没有这个文件或目录

4

我正在尝试使用mingw32为Linux编译这个

然而,我收到了以下错误和警告:

# i586-mingw32msvc-gcc ms04-020.c -lws2_32 -o ms04-020.exe
ms04-020.c:43:22: error: Winsock2.h: No such file or directory
ms04-020.c: In function ‘main’:
ms04-020.c:113: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:114:11: warning: unknown escape sequence '\;'
ms04-020.c: In function ‘readwrite’:
ms04-020.c:251: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:259: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:264: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:279: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:285: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:290: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:301: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:307: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:312: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c: In function ‘client_connect’:
ms04-020.c:333: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:343: warning: incompatible implicit declaration of built-in function ‘printf’

我该如何修复与Winsock2.h相关的错误?我已经成功在Windows 7上使用Visual Studio 2013编译过,这是一个可行的解决方案,但在Visual Studio 2010或更高版本上编译会使应用程序与Windows 2000目标操作系统不兼容。因此,尽管以这种方式构建了二进制文件,但无法执行。


1
Windows系统的头文件是否在编译器默认搜索的路径中?您可能需要使用“-I”(大写字母i)选项来添加路径。 - Some programmer dude
@JoachimPileborg:我没有Winsock2.h文件 - 我在哪里可以获取它? - SilverlightFox
1
我不知道是否有一个MinGW包含WIN32系统库和头文件,你应该去找一下。如果没有,那么应该有很多教程告诉你如何做。 - Some programmer dude
1个回答

7

正如名称所示,winsock2.h与Windows TCP/IP套接字的实现直接相关,仅存在于Windows系统中。

在Windows和Linux之间实现include的完全兼容可能会很困难。个人认为,你应该:

  • remove #include <winsock32.h> from your source for Linux compilation or better write :

    #ifdef _WIN32
    #include <Winsock2.h>
    #endif
    
  • add (eventually in a #else section) the missing headers

目前,warning: incompatible implicit declaration of built-in function ‘printf’ 表明您缺少一个 #include <stdio.h>


太好了 - #else 部分不需要了 - 只需删除 #include <Winsock2.h> 行并添加 #include <stdio.h> 即可编译。 - SilverlightFox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接