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

时间:2017-04-07 16:31:18

标签: c windows qt sockets

我正在使用QT Creator构建一个C plain项目。我的项目包含了一个套接字创建,我收到很多引用错误。

我的代码很简单:

#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()的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

您的<dependency> <groupId>org.glassfish.grizzly</groupId> <artifactId>grizzly-http-server</artifactId> <version>2.3.30</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-http</artifactId> <version>2.25.1</version> </dependency> 用法没问题。您需要更新项目设置并将#include <winsock2.h>添加为链接库。

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

ws2_32.lib

注意:我必须从命令行中删除“build”目录,然后从Qt Creator执行“clean build”以使更改生效。