客户端服务器程序 C Windows - 库冲突

标签 c windows sockets libraries

我在 Windows 机器上的 Eclipse 中用 C 语言创建了一个经典的客户端服务器程序。代码本身不会产生任何错误。我得到的唯一错误是关于库的。我已经包含了以下库:

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>

但是当我尝试构建项目时出现错误:

error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead".

唯一的问题是我没有包含winsock.h,而只包含winsock2.h,就像他们指定的那样。

如何解决这个问题?

更新

我现在按以下顺序定义了库:

#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

但现在我收到更多错误:

undefined reference to `socket@12'  
undefined reference to `gethostbyname@4'    
undefined reference to `connect@12' 
undefined reference to `htons@4'    
undefined reference to `WSACleanup@0'   
undefined reference to `closesocket@4'  
undefined reference to `WSACleanup@0'   
undefined reference to `WSAStartup@8'

更新2

我认为这个警告可能与我仍然不断收到的错误有关:

ignoring #pragma comment  [-Wunknown-pragmas]

最佳答案

winsock2.h 顶部有一行:

#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

您需要在 windows.h 之前包含 winsock2.h

关于客户端服务器程序 C Windows - 库冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23365066/

相关文章:

c - 如何在 C 上更改字符串中的单个字符?

c# - 自定义 Windows 7 登录

c - 使用 UDP 传递结构

Python线程给出全局名称未定义错误

c - 当我在 c 中使用 strlcpy 函数时,编译器给我一个错误

c - 如何更改 GTK 切换按钮的标签文本?

c++ - OpenProcessToken 从本地系统服务失败并出现 ERROR_ACCESS_DENIED

c# - 如何关闭包含对 NetworkStream.Read 的阻塞调用的线程

java - Java、C、C++等中十进制数的精度

python - Pyinstaller无法构建wxpython应用程序,缺少错误wx._xml