4

我在新应用程序中尝试使用 ZeroMQ 时遇到问题。请注意:我自己下载和构建 ZeroMQ 没有问题。我下载了 ZeroMQ ZIP 文件,在 Visual Studio/C++ 2008 中打开了项目/解决方案文件,并很好地构建了 ZeroMQ 库。ZeroMQ 安装文件夹的 /lib 目录包含 .lib、.dll 和其他文件,所以据我所知,一切都很好。

我的问题是我正在尝试构建一个简单的项目,其中包含 ZeroMQ 用户指南中的 HelloWorld 服务器示例。我创建了以下名为 helloserver.c 的文件。

//
// Hello World server
// Binds REP socket to tcp://*:5555
// Expects "Hello" from client, replies with "World"
//
#include <zmq.h>
#include <stdio.h>
#include <string.h>

int main (void)
{
zmq_msg_t request;
zmq_msg_t reply;

void *context = zmq_init (1);

// Socket to talk to clients
void *responder = zmq_socket (context, ZMQ_REP);
zmq_bind (responder, "tcp://*:5555");

while (1) {
// Wait for next request from client

    zmq_msg_init (&request);
    zmq_recvmsg (responder, &request, 0);
    printf ("Received Hello\n");
    zmq_msg_close (&request);

// Do some 'work'
    Sleep (1);

// Send reply back to client
    zmq_msg_init_size (&reply, 5);
    memcpy (zmq_msg_data (&reply), "World", 5);
    zmq_sendmsg (responder, &reply, 0);
    zmq_msg_close (&reply);
}
// We never get here but if we did, this would be how we end
zmq_close (responder);
zmq_term (context);
return 0;
}

我将 ZeroMQ 安装包含目录添加到 VC++2008 包含路径(Properties->Configuration Properties->C/C++->General->Additional Include Directories),我还将 ZeroMQ lib 目录添加到项目中:(Properties- >配置属性->C/C++->代码生成->运行时库,选择多线程调试DLL /MDd)。

我试图建立这个项目。一切都编译得很好,但是在链接时我得到了一堆像这样的未解决的外部:

1>链接... 1>helloserver.obj:错误LNK2019:未解析的外部符号_imp _zmq_term在函数_main 1>helloserver.obj中引用:错误LNK2019:未解析的外部符号_imp_zmq_close在函数_main 1>helloserver.obj中引用:错误 LNK2019:未解析的外部符号_imp _zmq_sendmsg在函数 _main 1>helloserver.obj 中引用:错误 LNK2019:未解析的外部符号_imp _zmq_msg_data在函数 _main 1>helloserver.obj 中引用:错误 LNK2019:未解析的外部符号_imp _zmq_msg_init_size在函数中引用_main 1>helloserver.obj:错误 LNK2019:无法解析的外部符号 _imp_zmq_msg_close 在函数 _main 1>helloserver.obj 中引用:错误 LNK2019:未解析的外部符号_imp _zmq_recvmsg在函数 _main 1>helloserver.obj 中引用:错误 LNK2019:未解析的外部符号_imp _zmq_msg_init在函数 _main 1>helloserver.obj 中引用:错误LNK2019:未解析的外部符号_imp _zmq_bind在函数_main 1>helloserver.obj 中引用:错误LNK2019:未解析的外部符号_imp _zmq_socket在函数_main 1>helloserver.obj 中引用:错误LNK2019:未解析的外部符号_imp _zmq_init在函数_main 中引用1>C:\work\visualc++2008\projects\HelloZMQServer\Debug\HelloZMQServer.exe : 致命错误 LNK1120: 11 unresolved externals

我尝试返回代码生成-> 运行时库设置并尝试将库开关更改为 ?MD 或 /MT 但没有任何效果,我仍然收到这些链接器错误。

请注意,当我创建 helloworld.c 时,我使用了一个空的 Windows 控制台应用程序项目,并且我所做的唯一更改是添加了 ZeroMQ 包含和 lib 目录,如上所示。我没有更改任何其他默认项目设置。我猜我在某处缺少项目设置。

我怎样才能解决这个问题?

4

3 回答 3

6

当我遇到类似错误时,这是​​因为我试图将 64 位库链接到 32 位项目。我下载了错误的版本。当我得到正确的,即 x86 而不是 x64 时,它就起作用了。

于 2013-12-30T18:35:23.410 回答
4

将 ZMQ 库路径(安装 ZMQ 库的路径\zeromq-2.1.10\lib)添加到您的项目中:

项目->属性->链接器->常规->附加库目录

还将 libzmq.lib 添加到

项目->属性->链接器->输入->附加依赖项

有趣的是,你需要在你的项目中有一个 libzmq.dll 的副本,否则当你运行你的项目时,调试器会报错“无法找到 libzmq.dll”。仍在寻找解决方法。

注意:这是我用来在 Visual Studio 2010 中运行我的 zmq 代码的。应该也适用于 VS 2008。

于 2011-11-25T04:34:40.517 回答
2

您没有提到您还将具体库添加到您的项目中。请注意,仅告诉 VS 库路径是不够的,您还必须将库本身添加到您的项目中。我现在手头没有 Visual Studio,但您会在项目的链接器设置中找到此选项。在那里你可以提到你想要链接的所有库。

于 2011-08-03T19:14:53.490 回答