我正在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
我该怎么办?
答案 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
选项。