ZMQ(java)-编译的心酸历程

Q&A

  • 错误 1 error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory d:\test\libzmq\src\windows.hpp 55 1 libzmq
    • 选择libzmq项目,右键->属性->配置属性->常规->平台工具集 修改为 visual studio 2013 -Windows Xp(v120_xp)
    • 因为我的sdk是vc的,所以得这样改。或者在包含目录里将路径引入也可。
  • 错误 7 error LNK1181: 无法打开输入文件“libsodium.lib” D:\test\libzmq\builds\msvc\vs2013\libzmq\LINK libzmq
    • 设置libzmq项目属性。右键->属性->配置属性->VC++ 目录 修改包含目录 为libzmq下的include目录。
  • 错误 5 error MSB3030:
    -“D:\test\libzmq\builds\msvc\vs2013\libzmq……….\libsodium\bin\Win32\Debug\v120_xp\dynamic\libsodium.dll”,原因是找不到该文件。 D:\test\libsodium\builds\msvc\vs2015\libsodium.import.props 31 5 libzmq
    • 在\libsodium\bin\Win32\Debug 下将v120文件copy一个副本,并重命名为v120_xp

编译篇

  • 我的配置

    • vs版本 vs ultimate 2013
    • 操作系统版本win7 Service Pack 1
    • jdk8
  • 公共包编译

    • libsodium
      1. git clone --depth 1 -b stable https://github.com/jedisct1/libsodium.git
      2. 用vs打开 libsodium\builds\msvc\vs2013\libsodium.sln
      3. 解决方案有DynRelease|x64 和DynDebug|x64 。我只是使用,所以选前者。
      4. 生成解决方案。生成成功后会在libsodium\bin\x64\Release\v120\dynamic下生成libsodium.dll和libsodium.lib
    • libzmq
      1. git clone git://github.com/zeromq/libzmq.git
      2. 用vs 打开 libzmq\builds\msvc\vs2013\libzmq.sln
      3. 解决方案配置DynRelease|x64
      4. 生成解决方案。生成成功后会在libzmq\bin\x64\Release\v120_xp\dynamic生成dll和lib文件
    • zeromq
      1. 建立文件夹 zeromq
      2. 分别建立两个子文件:lib,include
      3. 将libzmq\include下头文件复制到include
      4. 将libzmq\bin\x64\Release\v120_xp\dynamic 下 libzmq.dll libzmq.lib复制到lib
  • java版

    • git clone git://github.com/zeromq/jzmq.git
    • 打开jzmq\jzmq-jni\builds\msvc\msvc.sln
    • 选择jzmq 右键->属性->配置属性->VC++ 目录
      1. 修改包含目录,将以下三个目录加进去
      2. C:\Program Files\Java\jdk1.8.0_91\include
      3. C:\Program Files\Java\jdk1.8.0_91\include\win32
      4. zeromq\include (就是上一步中,自己建立的文件夹)
      5. 修改库目录,将zeromq\lib加入
      6. 以上路径都应该是绝对路径。
    • 解决方案配置Release|x64
    • 生成解决方案。jzmq\jzmq-jni\lib下有 jzmq.dll zmq.jar两个文件。zmq.jar需要放到zeromq\lib下。(据我测试,直接放在jdk的bin目录下亦是可行的)
    • 如果要使用java版。需要将zeromq\lib和jzmq\jzmq-jni\lib目录添加到环境变量中(这一步似乎是可省略的,但是有的人省略这一步会报错)。并将jar包导入到项目中。
    • 如果jar包中缺少一些包或类,可另行下载低版本的jar代替

Hello World篇

  • java 版测试–REQ&REP。

    • 这个例子用来测试zmq是否能正常工作
    • server

      package server;
      import org.zeromq.ZMQ;  
      
      public class JServer {  
      
         public static void main(String[] args) throws InterruptedException {  
             ZMQ.Context context = ZMQ.context(1);
      
             ZMQ.Socket responder = context.socket(ZMQ.REP);  
             responder.bind("tcp://*:5555"); 
      
             while(!Thread.currentThread().isInterrupted()){
                 //阻塞消息
                 byte[] request = responder.recv(0);
                 System.out.println("received " + new String(request));
      
                 Thread.sleep(1);
      
                 String reply = "World";
                 responder.send(reply.getBytes(),0);
             }
      
             responder.close();
             context.term();
          }  
      }  
      
    • Client

      package client;
      import org.zeromq.ZMQ;
      
      public class JClient {
      
          public static void main(String[] args) {
              ZMQ.Context context = ZMQ.context(1);
      
              System.out.println("Connecting to hello world server...");
      
              ZMQ.Socket requester = context.socket(ZMQ.REQ);
              requester.connect("tcp://localhost:5555");
      
              for (int requestNbr = 0; requestNbr != 10; requestNbr++) {
                  String request = "Hello";
                  System.out.println("Sending Hello " + requestNbr);
                  requester.send(request.getBytes(), 0);
      
                  byte[] reply = requester.recv(0);
                  System.out.println("Received " + new String(reply) + " " + requestNbr);
              }
              requester.close();
              context.term();
          }
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值