VS2017平台编译 zmq-4.2.5 过程

系统管理员 2022-03-25 16:23 544阅读 0赞

目的

为了能够在windows平台使用zmq进行通信,因此需要编译一个可用的zmq的dll

说明

libzmq是c++语言开发的,正式版本在这里:
https://github.com/zeromq/libzmq/releases
到这篇文件发布为止,正式稳定版是libzmq 4.3.1, 而本文仅适用4.2.5作为示范

zmq编译

  1. 按照给出的链接下载zeromq-4.2.5.zip文件。
  2. 解压到D:\zeromq文件夹中,
  3. 用vs2017打开工程文件:”D:\zeromq\zeromq-4.2.5\builds\msvc\vs2015\libzmq.sln”
  4. 提示升级,选择确定即可(工程自动升级到vs2017)
  5. 编译,最后提示7个项目中有6个没有成功编译。

在gitHub上找到答案,分析visualstudio的sln文件早期是由cmake生成的,用vs编译不完美,路径引用不正确。解决方案是:打开工程文件夹下的libzmq.import.props文件,这5个红线处,都去掉一串“…\libzmq”,同时需要把项目名称修改为libzmq,变成这样:
在这里插入图片描述

6,保存。重新打开工程编译,pass.

另外,git clone最新的开发版:
https://github.com/zeromq/libzmq
用vs2015直接编译并没有出现上面的问题。

开个新win32_console工程试验一下:

  • c/c++额外的库包含路径添加:
  • 链接器-额外的库包含路径添加:
  • 链接器-输入-依赖项添加:
  • 编译,pass,
  • 将”D:\zeromq\zeromq-4.2.5\bin\Win32\Debug\v140\dynamic\libzmq.dll”复制到生成的exe文件所在路径,执行,pass!

使用范例

Server端:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <assert.h>
  4. int main(void)
  5. {
  6. // Socket to talk to clients
  7. void *context = zmq_ctx_new();
  8. void *responder = zmq_socket(context, ZMQ_REP);
  9. int rc = zmq_bind(responder, "tcp://*:6666");
  10. assert(rc == 0);
  11. while (1) {
  12. char buffer[100000] = { '\0'};
  13. zmq_recv(responder, buffer, 100000, 0);
  14. printf("Received: %s\n", buffer);
  15. //sleep(1); // Do some 'work'
  16. zmq_send(responder, "World", 5, 0);
  17. }
  18. return 0;
  19. }

client端:

  1. #include<iostream>
  2. #include "zmq.h"
  3. #include <assert.h>
  4. #include <errno.h>
  5. #include <string.h>
  6. #include <stdio.h>
  7. using namespace std;
  8. #pragma comment(lib, "libzmq.lib")
  9. int main(int argc, char const *argv[]) {
  10. void *context = zmq_ctx_new();
  11. void *requester = zmq_socket(context, ZMQ_REQ);
  12. /* 这里连接的地址需要更换成自己要连接服务器的地址 */
  13. int rc = zmq_connect(requester, "tcp://127.0.0.1:6666");
  14. assert(rc == 0);
  15. char buf[100] = { '\0' };
  16. FILE* fp = NULL;
  17. fopen_s(&fp, "1.txt", "ab+");
  18. if (NULL != fp)
  19. {
  20. fread(buf, 1, 100, fp);
  21. }
  22. fclose(fp);
  23. int a, b, c;
  24. zmq_version(&a, &b, &c);
  25. cout << "zmq-version" << a << "-" << b << "-" << c << endl;
  26. for (int i = 0; i < 1; i++) {
  27. printf("sending msg\n");
  28. rc = zmq_send(requester, buf, 100, 0);
  29. assert(rc > 0);
  30. /* 接受回应 */
  31. char buf[10];
  32. memset(buf, 0, 10);
  33. zmq_recv(requester, buf, 10, 0);
  34. printf("recv: %s\n", buf);
  35. }
  36. return 0;
  37. }

发表评论

表情:
评论列表 (有 0 条评论,544人围观)

还没有评论,来说两句吧...

相关阅读