windows平台上编译生成libzmq

时间:2021-09-24 22:59:44

最近需要做一个密集计算型的项目,采用的是分布式计算架构,各子系统间通信用到了ZeroMQ(http://zeromq.org/)。ZeroMQ是一个高性能消息队列库,可作为一个动态库链接的应用程序中,而且性能非常强悍(参考http://www.cnblogs.com/rainbowzc/p/3357594.html)。

使用的是官方提供的libzmq,使用前需要自己编译,下面介绍一下编译的步骤,同时记录类编译过程中遇到了两个问题及解决方法。

步骤一:下载libzmq。我下载的版本是4.1.4。下载地址是https://github.com/zeromq/libzmq,下载到本地后目录结构如下:

windows平台上编译生成libzmqwindows平台上编译生成libzmq

其中builds->msvc目录如下:

windows平台上编译生成libzmqwindows平台上编译生成libzmq

可以根据自己的实际情况选择不同的VS版本进行编译。我用的是VS2010.

打开之后工程目录如下:

windows平台上编译生成libzmqwindows平台上编译生成libzmq

编译libzmq工程即可。但是编译过程中出现了两个错误。

错误一:提示“error C1083: 无法打开包括文件:“sodium/core.h”: No such file or directory”

错误二:提示“error C3861: “if_nametoindex”: 找不到标识符”

错误一的解决方法:原因是缺少libsodium库,因此从https://download.libsodium.org/libsodium/releases/下载针对VS的最新版(libsodium-1.0.8-msvc.zip)。

并将的libsodium-1.0.8-msvc.zip解压到zeromq4.1.4所在文件夹下,并将解压后的文件夹重命名为libsodium,然后使用VS2010编译libsodium,编译完成后再次编译libzmq,这个错误不再出现。

错误二的解决方法:在libzmq工程上右键-属性,弹出的属性页中,在配置属性-连接器-输入中的“附加依赖项”中增加Iphlpapi.lib,如下图所示:

windows平台上编译生成libzmqwindows平台上编译生成libzmq

然后在出错的“tcp_address.cpp”文件上方增加“#include <netioapi.h>”,如下图所示:

windows平台上编译生成libzmq

然后再次编译生成libzmq即可。