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

时间:2012-04-06 21:49:07

标签: c++ visual-studio-2010

我想将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:未解析的外部符号__imp__closesocket @ 4在函数“public:__thiscall UdpSocket :: Implementation :: ~Installation(void)”中引用(?? 1Implementation @ UdpSocket @@ QAE @ XZ)

     

...

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

然后在示例解决方案中,我添加了我的main.cpp,然后我将(属性> C / C ++>附加包含目录)包含在oscpack库的文件夹中,然后在Linker选项卡上添加了文件夹位置libs和libs的名称。

3 个答案:

答案 0 :(得分:10)

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

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

您可以从MSDN文章中找到这类依赖关系,例如closesocket()。它位于文章的最底部。 标题位告诉您#include需要什么,你做对了。 位告诉您需要告诉链接器链接的内容。不是自动的,你必须自己照顾它。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

此外,请确保对正确的构建配置进行更改。 I. e。如果您在调试模式下构建,请确保已将lib名称和头文件目录添加到Debug配置中。