在 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 (??1Implementation@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 结合使用