Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
windows-winsock2.h链接库中的C编程套接字?_C_Sockets_Visual Studio Code_Mingw - Fatal编程技术网

windows-winsock2.h链接库中的C编程套接字?

windows-winsock2.h链接库中的C编程套接字?,c,sockets,visual-studio-code,mingw,C,Sockets,Visual Studio Code,Mingw,我正在尝试使用C构建一些Windows套接字代码。我从以下基本代码开始初始化WinSock: #包括 #包括 int main(int argc,char*argv[]) { WSADATA wsa; 插座; printf(“\n初始化Winsock…”); if(WSAStartup(MAKEWORD(2,2),&wsa)!=0) { printf(“失败。错误代码:%d”,WSAGetLastError()); 返回1; } printf(“已初始化。\n”); }; 运行代码时,会出现以

我正在尝试使用C构建一些Windows套接字代码。我从以下基本代码开始初始化WinSock:

#包括
#包括
int main(int argc,char*argv[])
{
WSADATA wsa;
插座;
printf(“\n初始化Winsock…”);
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)
{
printf(“失败。错误代码:%d”,WSAGetLastError());
返回1;
}
printf(“已初始化。\n”);
};
运行代码时,会出现以下错误:

对“\uu imp\u WSAStartup”的未定义引用

谷歌建议,这与需要一个库链接有关-
ws2\u32

我使用的是Cygwin,但显然这是在Windows中模拟POSIX环境,因此MinGW更适合此实例。因此,我安装了它,并更新了VSCode中的设置以使用它

现在我的问题是,我不确定如何链接所需的库。我是否在程序中添加了一些代码?我是在某种独立的终端上做的吗


这对我来说是全新的。

使用Cygwin作为环境进行编码不会被重新开始。(.)选择一个或另一个环境。i、 e.在Windows或Linux中运行
GCC
,但不能同时在两者中运行。与
GCC
捆绑在一起,具有可在Windows或Linux中使用的版本

是的,错误消息
undefined reference to
表示尽管头文件在那里,但它引用的库却不在那里。它需要使用
Ws2_32.lib
链接

例如,如果使用Code::Blocks IDE,则表示用于链接库的指令

或者,从命令行使用
GCC

例如,如果我在中有一个名为libmine.so的库 /home/newhall/lib/然后我会执行以下操作将其链接到我的 节目:


将代码链接到
.exe
文件的行需要在
.o
.c
文件后包含
-lws2\u 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

谢谢你的回复。我正在使用VSCode。这是使用GCC:的
命令行,我正在努力解决这个问题-我在哪里可以访问它?感谢上面显示的示例行是否能帮助您解决问题?对-因此,如果我正确地遵循了gcc命令,只需将其输入到普通的windows命令提示符中即可。如果是这样的话,我今晚晚些时候会有一个剧本是的,这就是上面的
gcc
示例所表明的。(除了该示例使用的是Linux路径:)。粗略的窗口将类似于
C:\dir1\dir2\libname.lib
。只需验证系统上是否存在该库,然后输入实际路径,如图所示。祝你好运。如果你的编译器支持它,你可以直接在你的代码中使用
#pragma注释(lib,“ws2_32.lib”)
(或等效的)。
gcc -c -o myprogram.o myprogram.c
gcc -o myprogram.exe myprogram.o -lws2_32