【问题标题】:How to link wsock32 library through g++?如何通过g++链接wsock32库?
【发布时间】:2012-02-18 01:59:20
【问题描述】:

我在 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

我该怎么办??

【问题讨论】:

    标签: c++ linker g++


    【解决方案1】:

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

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

    这意味着

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

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

    我怀疑您的编译器可能会自动查找 system32,因此您可能只想尝试跳过 -L 选项。

    【讨论】:

    • 顺便说一下,你可能想要 -lws2_32
    • 虽然,如果我真的使用 -L 开关,它不起作用!相反,我面临一百万个奇怪的错误!
    • @Joachim,为什么不直接使用-lc:\windows\system32\wsock32
    【解决方案2】:

    正如@Joshua 所说,您可能想要ws2_32.dll

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

    w32headers 项目为大多数标准 Windows DLL(包括 ws2_32.dll)提供 gcc- 和 g++- 兼容的标头和存档。存档的名称通常是 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 选项覆盖输出二进制文件的名称。

    注意:我在回答中使用了不间断的连字符。如果您复制并粘贴命令行选项,请务必将所有看起来像连字符的字符替换为常规连字符。

    【讨论】:

    • @DarrenSadr,你为什么要使用不间断的连字符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多