zmq看起来很好用,但是安装起来不是一般麻烦。原来以为java绑定会提供jar包直接可使用,但是官网没有提供已经编译好的库文件和jar。多么的不方便啊!最终还是要自己动手编译!
安装java版本的zmq,需要先安装libzmq,即核心库,然后是java绑定,即jzmq。
安装libzmq
libzmq是ZMQ的核心库,首先需要安装该库,然后才能使用ZMQ。
一开始图方便,不想编译源码,比较麻烦不是?所以从 http://zeromq.org/distro:microsoft-windows下载windows安装程序进行安装。但是发现还是需要编译安装jzmq,所以干脆已开始就编译安装libzmq。
libzmq源码的git项目位于 https://github.com/zeromq/libzmq,
注意坑:从git上下载源码()后,使用vs2013编译时,弹出“无法找到sidium.h”。无法想象竟然会缺失文件!
所以如果遇到上述问题,最好还是去 http://www.zeromq.org/area:download, 下载稳定版本,目前发现V4.0.5是可编译的版本。
开始编译之前,特别说明本次实践的测试环境:
- 编译工具:vs 2013
- 平台:windows 7 x64旗舰版
开始安装:
- 首先,运行vs2013,打开解决方案\zeromq-4.0.5\builds\msvc\msvc.sln,系统提示转换方案,选择是即可。设置配置为release win32。
- 执行“生成/生成解决方案”,没有意外的话构建会成功。
- 生成的libzmq.lib位于\zeromq-4.0.5\builds\msvc\Release,libzmq.dll则位于\zeromq-4.0.5\lib中,将libzmq.lib拷贝到\zeromq-4.0.5\lib目录,方便后面安装jzmq。
安装jzmq
jzmq是libzmq的java语言绑定。如果要在java程序中使用zmq,那么可以通过jzmq使用zmq的套接字。当然也可以使用jeromq,这是zmq的的java实现。
安装jzmq比较麻烦,其中有大量的坑,一不小心就碰到大堆错误。
接下来,开始编译安装jzmq。
下载
源码: https://github.com/zeromq/jzmq
编译
在windows上编译时,有几个大坑!也许在 https://github.com/zeromq/jzmq/issues的问题列表里有其他人遇到的问题说明,但是一开始如果作者没有特别说明,谁会去仔细看?我们都会默认没有特别说明的软件是能正常工作的,正常思维都是如此吧?
好,先打住抱怨,这没有任何用处!另外,毕竟我没有付任何费用,我不能像个怨妇一样抱怨!
了解一些坑
1)坑一:在github的jzmq项目主页上,找不到在windows上的构建说明,这应该是最大的坑吧。所以,你不清楚使用什么版本的visual studio。如果有人找到了,烦请相告。
2)坑2:“预先生成事件”的命令行根本就是错的。
在jzmq属性页/配置属性/生成事件/预先生成事件中,可以看到命令行:
点击命令行,看到原来的命令是:
说明:
第一个红框内的命令是不能执行的,必须按这个格式修改下:copy ..\config.hpp “..\..\..\src\main\c++\”;
第二个javac命令也是错误的,红框内的ZFrame.java文件在编译的时候会找不到Utils.java文件。错误提示如下:
注意上面红框内的错误提示,这说明ZFrame.java不能识别Utils这个类。但实际上,该类与ZFrame在同一个包内,且访问修饰符是public,所以按理说是可以访问的!之所以报不能访问的错误(即”找不到符号“),是因为Utils.java没有被编译,所以必须在ZFrame.java前加上Utils.java文件,如下:
javac ..\..\..\src\main\java\org\zeromq\ZMQ.java ..\..\..\src\main\java\org\zeromq\ZMQException.java ..\..\..\src\main\java\org\zeromq\ZMQForwarder.java ..\..\..\src\main\java\org\zeromq\ZMQQueue.java ..\..\..\src\main\java\org\zeromq\ZMQStreamer.java ..\..\..\src\main\java\org\zeromq\EmbeddedLibraryTools.java ..\..\..\src\main\java\org\zeromq\App.java ..\..\..\src\main\java\org\zeromq\ZContext.java ..\..\..\src\main\java\org\zeromq\ZDispatcher.java ..\..\..\src\main\java\org\zeromq\Utils.java ..\..\..\src\main\java\org\zeromq\ZFrame.java ..\..\..\src\main\java\org\zeromq\ZMsg.java
经过上述处理后,命令行可以工作了。
那么正式开工吧
好了,既然已经知道有哪些地方需要注意并且如何修复后,我们开始工作。编译环境和libzmq一样,仍然是使用vs 2013。
首先修改上面说的命令行不准确的这两个问题。
第二,修改jzmq的VC++包含目录和库目录。
其中,在“包含目录”中加入编译好的libzmq的include路径,并且修改java路径。在“库目录”中加入libzmq的lib路径,即上面的\zeromq-4.0.5\lib。如下:
可以编译了,点击”生成/生成解决方案“,输出如下则意味着成功了。
生成文件,包括jzmq.dll,jzmq.lib,zmq.jar,被放在项目的lib目录下。
至此,花费数小时来解决问题,构建过程总算艰难完成。但是目前尚不清楚zmq.jar包是否能正常工作,有待测试,详细过程请点击 这里。
来自为知笔记(Wiz)