【问题标题】:Why am I getting linker errors for ws2_32.dll in my C program?为什么我的 C 程序中出现 ws2_32.dll 的链接器错误?
【发布时间】:2011-03-07 22:04:17
【问题描述】:

我正在 Visual Studio 2010 中编写程序。 我无法将名为 ws2_32.dll 的文件与我的项目链接。

谁能告诉我该怎么做?

【问题讨论】:

  • 你试过什么?您在项目中的哪些地方进行了更改?取得了哪些实际成果?如果有错误消息,它们是什么?

标签: c visual-studio winapi linker-errors winsock2


【解决方案1】:

通常您不会直接链接到 ws2_32.dll,而是链接到 WS2_32.Lib,您可以在 Windows SDK 中找到它。所以在你的代码中你写

#include <winsock2.h>

然后将 WS2_32.Lib 添加到链接器设置中,一切顺利。

Windows SDK 在这里:

http://msdn.microsoft.com/en-us/windows/bb980924.aspx

【讨论】:

  • 如果您已正确安装 Visual Studio 2010,则无需下载 SDK。
  • 或者可能取决于版本;我不知道 2010 年是否仍然如此,但在 2008 年的 express 中不包括在内。感谢您的评论,希望它能让原始海报首先出现在 VS2010 默认的 lib 文件夹中。
  • 哦,是的,我不太确定 Express 版本。我从来没有使用过它。 2008 和 2010 的完整版本包括 Windows SDK,无需额外下载。包含该链接仍然很有帮助,但我将它作为最后的手段。
  • @eznme - 为什么?答案不是最好的答案。您甚至没有意识到 Visual Studio Express 的局限性。 Cody Gray 的回答要好得多。
【解决方案2】:

首要任务是导入定义ws2_32.dll 导出的函数的头文件。为此,您可以将以下语句添加到您希望在其中调用这些函数的任何源文件的顶部:

#include <winsock2.h>

然后,您必须告诉链接器在哪里可以找到该 DLL 的导入库。在 Visual Studio 中有两种方法可以做到这一点,但最简单的方法是在源代码中添加以下行:

#pragma comment(lib, "ws2_32.lib")

您还可以将其作为依赖项添加到链接器的“附加依赖项”属性(在您的项目属性 -> 配置属性 -> 链接器 -> 输入下找到)。

MSDN 也有一个getting started guide,它会引导您了解creating a basic Winsock application。在继续之前,请确保您已阅读它。

【讨论】:

    【解决方案3】:

    如果您没有 lib 文件,则需要使用 LoadLibrary 加载文件。

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多