6

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

1>oscpackd.lib(UdpSocket.obj) : 错误 LNK2019: 函数“public: __thiscall UdpSocket::Implementation::Implementation(void)”中引用的无法解析的外部符号 __imp__socket@12 (??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 库的文件夹,然后在链接器选项卡上添加了库的文件夹位置和名称的库。

4

3 回答 3

10

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

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

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

于 2012-04-06T22:04:38.157 回答
3

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

于 2012-04-06T22:08:55.720 回答
0

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

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

于 2012-04-06T22:00:39.697 回答