c - 如何在 C 中正确链接 winsock2.h?

标签 c windows qt sockets

<分区>

我正在使用 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 库不包括在内。如何在没有 #pragma comment() 的情况下做到这一点?

最佳答案

你的 #include <winsock2.h>使用很好。这是您需要更新项目设置并添加 ws2_32.lib作为链接库。

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

LIBS += ws2_32.lib

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

关于c - 如何在 C 中正确链接 winsock2.h?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43283049/

相关文章:

c++ - 运行时错误: "*** glibc detected ***: double free or corruption (out)"

java - 当我位于 Windows CMD 中的同一文件夹时,为什么必须为 .class 文件指定 Java 类路径?

windows - Composer 不工作

c - 返回 char[] 以在 strtok() 函数中使用它

c - 有什么办法可以将 4 字节数表示为 16 字节数吗?

java - 将使用 Netbeans 创建的 Java 程序固定在任务栏上?

qt - QDoubleSpinBox的前导零(始终为4位数字)

c++ - Qt 在不相关的对象之间传递变量

c - 为什么我会收到此错误? strcpy

c - (C 中的内联汇编)有趣的内存段错误