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

时间:2012-01-24 20:05:28

标签: 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

我该怎么办?

2 个答案:

答案 0 :(得分:6)

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

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

w32headers项目为大多数标准Windows DLL提供gcc - 和g++兼容的标头和存档,包括ws2_32.dll。归档的名称通常是DLL的名称减去.dll扩展名,前缀为lib,后缀为.a(遵循* nix归档命名约定)。因此,ws2_32.dll的符号位于libws2_32.a中,可以使用‑lws2_32进行关联。

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

g++ C:\Program.cpp -lws2_32

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

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

答案 1 :(得分:5)

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

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

这意味着

g++ C:\Program.cpp -LC:\Windows\System32 -lwsock32

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

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