在 Visual Studio 2010 上将静态库链接到我的项目

Posted

技术标签:

【中文标题】在 Visual Studio 2010 上将静态库链接到我的项目【英文标题】:Linking a static library to my project on Visual Studio 2010 【发布时间】:2012-04-06 21:49:06 【问题描述】:

我想将 oscpack (http://code.google.com/p/oscpack/) 用作我的项目的静态库,但是当我尝试将其添加到示例时,出现链接错误,例如:

1>oscpackd.lib(UdpSocket.obj):错误 LNK2019:未解析的外部符号 __imp__socket@12 在函数“public: __thiscall UdpSocket::Implementation::Implementation(void)”中引用 (??0Implementation@UdpSocket@@QAE @XZ)

1>oscpackd.lib(UdpSocket.obj) : 错误 LNK2019: 函数“public: __thiscall UdpSocket::Implementation::~Implementation(void)”中引用的无法解析的外部符号 __imp__closesocket@4 (??1Imp​​lementation@UdpSocket@@ QAE@XZ)

...

基本上,我创建了一个用于构建 oscpack.lib 的解决方案,在项目中我添加了相应的 .h 和 .cpp 文件。

然后在示例解决方案中,我添加了 main.cpp,然后包含(属性>C/C++>其他包含目录)oscpack 库的文件夹,然后在链接器选项卡上添加了库的文件夹位置以及库的名称。

【问题讨论】:

【参考方案1】:

在解决方案资源管理器窗口中右键单击您的项目,然后单击属性 > 链接器 > 输入 > 附加依赖项设置。您必须添加 ws2_32.lib。

VS 项目模板负责告诉链接器链接最常见的 Windows 库。像 kernel32.lib 一样,没有它就无法编写 Windows 程序。但不是winsock,不是每个程序都想要创建一个套接字。必须明确添加。

您可以从有关 closesocket() 的 MSDN 文章中找到此类依赖项。它在文章的底部。 Header 位告诉您#include 需要什么,您说得对。 Library 位告诉您需要告诉链接器链接的内容。不是自动的,你必须自己处理。

【讨论】:

【参考方案2】:

已经有正确的答案 - 您需要指定一个要链接的 winsock 库。 但对于小型项目,这是我最喜欢的方式: #pragma comment(lib, "ws2_32.lib") 只需将其放在您的 main.cpp 中(注意:特定于 MSVC)

【讨论】:

【参考方案3】:

您是说将库和 main.cpp 放入单独的解决方案中吗?尝试将它们放入同一个解决方案中,并适当地设置项目引用。

另外,请确保您对正确的构建配置进行了更改。 IE。如果您在 Debug 模式下构建,请确保已将 lib 名称和头目录添加到 Debug 配置中。

【讨论】:

以上是关于在 Visual Studio 2010 上将静态库链接到我的项目的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2010 数据库项目填充静态数据的最佳实践?

Visual Studio 2010 不会自动链接来自依赖项的项目中的静态库,因为它应该是

Visual Studio 2010 Professional 中的 /analyze 标志

Visual Studio 2010 Javascript Intellisense 无法正常工作

Visual Studio 解决方案:静态项目还是共享项目?

如何在 ASP.NET MVC 视图上将 XSD Schema 与 Visual Studio Intellisense 结合使用