如何在C中正确链接winsock2.h? [复制]

Posted

技术标签:

【中文标题】如何在C中正确链接winsock2.h? [复制]【英文标题】:How to correctly link winsock2.h in C? [duplicate] 【发布时间】:2017-04-07 16:31:17 【问题描述】:

我正在使用 QT Creator 构建一个纯 C 项目。我的项目包含一个套接字创建,但我遇到了很多参考错误。

我的代码很简单:

#include <winsock2.h>
#include <stdio.h>

// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")

int main(int argc , char *argv[])

    WSADATA wsa;
    SOCKET s;

    printf("\nInitialising Winsock...");
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
    
        printf("Failed. Error Code : %d",WSAGetLastError());
        return 1;
    

    printf("Initialised.\n");

    if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
    
        printf("Could not create socket : %d" , WSAGetLastError());
    

    printf("Socket created.\n");

    return 0;

编译错误:

undefined reference to `_imp__WSAStartup@8'
undefined reference to `_imp__WSAGetLastError@0'
undefined reference to `_imp__socket@12'
undefined reference to `_imp__WSAGetLastError@0'

那么我想这意味着winsock2.h lib 不包括在内。没有#pragma comment()怎么办?

【问题讨论】:

@a3f 感谢提醒!我刚刚检查了答案,它现在正在工作 【参考方案1】:

您的#include &lt;winsock2.h&gt; 用法很好。就是你需要更新你的项目设置,添加ws2_32.lib作为链接库。

对于 Qt,只需将此行添加到您的 .pro 文件中。假设您使用的是 Microsoft 编译器:

LIBS += ws2_32.lib

注意:我必须从命令行实际删除“build”目录,然后从 Qt Creator 执行“干净构建”才能使更改生效。

【讨论】:

Visual Studio 项目? 哦,我没有看到Qt 标签……我会尽快解决这个问题…… 是的!此解决方案有效

以上是关于如何在C中正确链接winsock2.h? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib

VS2008 编译错误 <winsock2.h>

winsock.h与winsock2.h冲突解决

bind(...) 总是使用 WinSock2 返回 -1 -- C++

c语言读取mysql库中的数据的程序头文件怎么设置

WinSock2.h 中的重新定义错误 [重复]