【问题标题】:Client Server Program C Windows - Library conflict客户端服务器程序 C Windows - 库冲突
【发布时间】:2014-04-29 12:45:24
【问题描述】:

我在 Eclipse 的 Windows 机器上用 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]

【问题讨论】:

    标签: c windows sockets libraries


    【解决方案1】:

    winsock2.h 顶部有一行:

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

    您需要在windows.h 之前添加winsock2.h

    【讨论】:

    • 感谢您的回复。我不太明白:我需要在 windows.h 之前包含什么?是winsock2.h吗?因为我这样做并添加了您的#define,但现在我遇到了更多错误。
    • 如果包含 windows.h,windows.h 将包含 winsock.h。您需要在 windows.h 之前包含 winsock2.h 以防止这种情况。请使用其他错误更新您的问题
    • 我做到了。请查看更新后的问题。
    • @JohnSmith 你链接到 ws2_32.lib 了吗?
    • @JohnSmith,您之前的错误是编译错误。这些新错误是链接器错误,表明您没有链接到 ws2_32.lib 作为 Fritzone 指定的。请注意,您的代码中不需要 #define。那已经在winsock2.h里面了。
    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多