如何通过g ++链接wsock32库?

dsy*_*nkd 4 c++ linker g++

我在Windows上使用minGW,试图编译一个c ++程序.我在那里使用了套接字,所以我试图链接(不包括......我已经包含了winsock.h)wsock32库.我知道-L开关用于链接,但以下命令都不起作用:

g++ C:\program.cpp -Lwsock32.lib
g++ C:\program.cpp -LC:\windows\system32\wsock32.dll
g++ C:\program.cpp -lC:\windows\system32\wsock32.dll
g++ C:\program.cpp -LC:\windows\system32\wsock32.lib
Run Code Online (Sandbox Code Playgroud)

我该怎么办??

Dan*_*ien 7

正如@Joshua评论的那样,你可能想要ws2_32.dll.

GNU编译器集合使用ranlib 存档(A文件)而不是Visual Studio LIB文件.

该w32headers项目提供gcc-和g++兼容的头和大多数标准的Windows DLL,包括档案ws2_32.dll.归档的名称通常是DLL的名称减去.dll扩展名,前缀lib和后缀.a(遵循*nix归档命名约定).因此,符号为ws2_32.dllin libws2_32.a,可以与使用链接?lws2_32.

默认情况下,w32headers存档位于GNU ld库路径中,因此为了能够与标准Windows DLL链接,不需要使用?L选项添加库目录.在您的情况下,您需要的唯一选择是?lws2_32:

g++ C:\Program.cpp -lws2_32

假设编译和链接成功,输出将a.exe在当前目录中.您可以使用该?o选项覆盖输出二进制文件的名称.

注意:我在答案中使用了不间断的连字符.如果复制并粘贴命令行选项,请确保使用常规连字符替换所有带连字符的字符.


Joa*_*son 5

-L选项用于设置链接器应查找库/ dll的目录.

-l选项用于命名要链接的库/ dll.

那意味着

g++ C:\Program.cpp -LC:\Windows\System32 -lwsock32
Run Code Online (Sandbox Code Playgroud)

应该是从常规Windows命令提示符编译程序的命令.

我怀疑你的编译器可能会自动查看system32,所以你可能只想尝试跳过该-L选项.

  • 顺便说一下,你可能想要-lws2_32 (2认同)