我想将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的名称。
答案 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配置中。