注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

zmq和jzmq在window32位或64位环境下编译并使用  

来自genww   2013-04-10 11:42:19|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
zmq和jzmq目前官方没有提供已编译好的文件供下载,git上的也只有很老的(2.0)版本。由于在开发过程中都使用的windows系统,所以在windows下能够使用jzmq对开发和调试系统来讲都会很方便。但是,通过官方网站上的介绍在windows下安装zmq3.2.2版本会有许多问题,有各种坑,且网上相关资料缺乏。笔者经过不断的尝试终于成功的在windows下编译和使用了jzmq,这里把windows通过编译安装zmq和jzmq的方式整理并记录了下来,以便需要的人能够参考。

环境要求

1.安装了jdk(请选择对应的是32位版本还是64位版本)且设置了对应的环境变量,能够正确在cmd中执行javac命令
2.window环境中安装了msvc2008或更新版本

zeromq的编译

zeromq官方提供了已编译好的对应的installer版本下载,包含32位和64位。但是在使用时会遇到许多问题,故无论是使用zeromq还是通过zeromq库去编译jzmq,最好都是自己去编译一下zeromq。编译方法如下:

编译步骤:
1.登录http://www.zeromq.org/area:download下载window的源码包
2.下载好源码包后用msvc打开builds\msvc\msvc.sln
3.编译即可。注意这里有个小坑,3.2.2版本在编译中会抛出errorno.cpp文件找不到等异常,并导致编译失败,比较奇怪。这时候可以在libzmq工程目录下Source Files中找到errorno.cpp文件,双击后发现msvc也无法打开它,难道这个文件本身不需要?直接删除这个文件,再次编译,通过。
4.编译好的库会放在lib子目录中。

jzmq的编译

要在windows下使用jzmq就更悲催了。官方居然没有提供已编译好的window版本,只给出了源码和编译步骤。这样只能自己编译。jzmq编译也分windows32位和64位两个版本。编译方式也不同特别是window64位版本的编译,你用官方的方法一定编译不过。下面具体讲讲在编译中遇到的问题和处理方式。

jzmq的windows32位版本的编译:

1.下载源码包:git clone https://github.com/zeromq/jzmq.git
2.用msvc打开builds\msvc\msvc.sln进入jzmq工程
3.配置工程依赖路径:msvc2008配置在:Tools|Options|Projects and Solutions|VC++ Directories|Include files。2008后期后期版本略有不同,在对应的工程下,点击右键进入属性后找到VC++目录做对应操作即可。
路径设置参考:
Include files:
    <jdk>\include\win32
    <jdk>\include
    <zeromq>\include

Library files:
    <zeromq>\lib
4.编译即可。注意这里有个小坑:如果你使用的是官方已打包好的zeromq库进行编译,下载对应的依赖库名称是类似libzmq-v90-mt-3_2_2.dll(或lib)而非libzmq.dll(或lib)。这是你要将名称替换成libzmq.dll,libzmq.lib。这样才能编译通过。

jzmq的windows64为版本的编译:

1.下载jzmq源码:git clone https://github.com/zeromq/jzmq.git
2.另外还需要下载cmake for window(注意官方没有说选择32位还是64位版本,但实际上这只是个编译中间工具,32位版本亦可,无需刻意寻找对应的64位版本,官方也没提供):http://www.cmake.org/cmake/resources/software.html
3.在jzmq源码目录中创建一个新目录:build64(官方在步骤3中说Insert attached CMakeLists.txt,下载这个文件并覆盖到jzmq根目录。注意千万别这么做,那个CMakeLists.txt是很老的版本了。不适用现在的环境了。好大个坑。实际上你无需替换任何CMakeLists.txt文件)
4.在build64目录中cmd运行D:\Microsoft Visual Studio 11.0\VC\bin\amd64\vcvars64.bat(请换成你机子上msvc对应目录。又是个大坑,官方居然没有这一步,cmd没有通过该步设置对应的环境变量后续即使能工作都是错误的)
5.不要关闭cmd,再运行cmake .. -G "NMake Makefiles"
6.完成后再cmake-gui .打开cmake图形界面,设置CMAKE_BUILD_TYPE为Release,然后分别点击Configure,Generate
7.指定编译的include和lib(官方又没提该步,如果不熟悉nmake的话后续操作会比较困惑)
请换成你机子上msvc对应目录,注意libzmq.dll也需要64位版本,可在http://miru.hk/archive/ZeroMQ-3.2.2rc2~miru1.5-x86.exe下载编译好的版本。然后进入lib目录下把任意一个lib版本换成libzmq.lib,这样编译器才能够识别。如libzmq-v110-mt-3_2_2.lib换成libzmq.lib。cmd脚本例子如下:
set INCLUDE=%INCLUDE%;F:\zmq\zeromq-3.2.2\include;D:\jdk\include;D:\jdk\include\win32
set LIB=%LIB%;F:\zmq\zmq
8.最后运行nmake生成对应库文件。(可选)如果你安装了NSIS的话可以运行nmake package让它生成可安装文件

使eclipse能够使用jzmq

在使用jzmq时可能也会遇到一些问题,这里提供了一些解决方案可参考。

首先确保run->run configurations->arguments->VM arguments下指定了libraray path,如:-Djava.library.path=E:\cfg\lib\win64。由于jzmq.dll同时又依赖libzmq.dll,而dll与dll之间的依赖是通过system path关联的,所以还需要将libzmq.dll放在system path环境变量中。

如果eclipse运行Can't find dependent libraries出现问题,请按如下方式依次检查:

1.确保libzmq.dll已放入了system path环境变量中?可通过打开cmd后输入where libzmq.dll检查
2.eclipse是否重启?如果system path环境变量变更,需要重启eclipse后eclipse才能识别
3.如果还是不行,从http://www.dependencywalker.com/下载dependencywalker小工具,600k左右,它能够查看window模块(exe,dll,sys等)依赖的模块有哪些,使用非常简单。通过它检查jzmq.dll模块具体依赖了哪些模块,在系统环境变量中补上缺失的模块即可

  评论这张
 
阅读(3518)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017