[英]C Programming sockets in windows - winsock2.h linking libraries?
我正在尝试使用 C 构建一些 Windows 套接字代码。 我从以下基本代码开始初始化 WinSock:
#include <winsock2.h>
#include <stdio.h>
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");
};
当我运行代码时,会出现以下错误:
undefined reference to '__imp_WSAStartup'
一个快速的谷歌建议这与需要一个库链接有关 - ws2_32
?
我使用的是 Cygwin,但显然这是试图模仿 Windows 中的 POSIX 环境,因此 MinGW 更适合这种情况。 因此,我在 VSCode 中安装并更新了设置以使用它。
现在我的问题是,我不确定如何链接所需的库。 我是否在我的程序中通过添加一些代码来做到这一点? 我是否在某种单独的终端中进行操作?
这对我来说都是新的。
不推荐使用 Cygwin 作为编码环境。 ( 请参阅使用 Cygwin 的利弊。)选择一个环境或另一个。 即在 Windows 或 Linux 中运行GCC
,但不能同时运行。 Code::Blocks与GCC
捆绑在一起,并且具有可用于 Windows 或 Linux 的版本。
是的,错误消息undefined reference to
表明虽然 header 文件存在,但它引用的库不存在。 它需要使用Ws2_32.lib
链接。
例如,如果使用 Code::Blocks IDE,链接库的说明在这里。
或者,从命令行使用GCC
:
例如,如果我在 /home/newhall/lib/ 中有一个名为 libmine.so 的库,那么我将执行以下操作将其链接到我的程序中:
$ gcc -o myprog myprog.c -L/home/newhall/lib -lmine //Linux
C:\> gcc -o myprog myprog.c -LC:\home\newhall\lib -lmine //Windows
将代码链接到.exe
文件的行需要在.o
或.c
文件之后包含-lws2_32
。 因此,在您的情况下,如果您的程序称为myprogram.c
您将需要运行:
gcc -o myprogram.exe myprogram.c -lws2_32
或者,如果您在单独的步骤中编译和链接:
gcc -c -o myprogram.o myprogram.c
gcc -o myprogram.exe myprogram.o -lws2_32
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.