如何在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 <winsock2.h>
用法很好。就是你需要更新你的项目设置,添加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