银河麒麟(Kylin) - V10 SP2高级服务器操作系统ARM64编译ZeroMQ-4.3.4版本

在这里插入图片描述


原因

QT项目找不到 “libzmq.so.5” :

error :while loading shared libraries: libzmq.so.5: cannot open shared object file: No such file or directory

在这里插入图片描述

已解决在此记录

ZeroMQ介绍

ZeroMQ----------消息中间件
ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。
ZMQ不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。

测试环境

服务器配置

型号:飞龙RM5000-F
CPU:飞腾FT2000+ (64核、2.2GHz)
内存:256G、DDR4
硬盘:2T SSD、10T机械
系统:银河麒麟高级服务器系统V10
平台架构:ARM

准备工作

1、去官网下载ZeroMQ-4.3.4 源码文件

下载: zeromq-4.3.4.tar.gz

如果打不开,需要挂梯子

官网:http://download.zeromq.org/

最新版本是:libzmq 4.3.5

Github地址:https://github.com/zeromq/libzmq/releases

我为了稳定我选择了:libzmq 4.3.4 版本
在这里插入图片描述

编译

1、编译安装zeromq-4.3.4.tar.gz

解压:zeromq-4.3.4.tar.gz

tar -xvf zeromq-4.3.4.tar.gz

进入:zeromq-4.3.4

cd zeromq-4.3.4

在这里插入图片描述

./configure

在这里插入图片描述
在这里插入图片描述

未报错

自动创建Makefile文件

在这里插入图片描述

make             #编译

在这里插入图片描述
在这里插入图片描述

未报错,编译完成会离开目录

make install     #然后执行安装

在这里插入图片描述

2、查看libzmq.so.5安装目录

whereis libzmq.so.5

在这里插入图片描述

3、将/usr/local/lib加到共享库配置文件/etc/ld.so.conf中

vim /etc/ld.so.conf

在这里插入图片描述

添加完成输入命令ldconfig:

ldconfig       #更新动态链接库的缓存文件。

在这里插入图片描述
没有报libzmq.so.5/libzmq.so错误就没有问题。


警告:
如果你没有/etc/ld.so.conf操作权限、可以使用以下方法:
编辑你当前用户的用户目录下的.bash_profile文件 在文件后面加上:

vim ~/.bash_profile 
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

在这里插入图片描述

添加完成保存并关闭文件

source ~/.bash_profile        #使该文件改动生效

测试程序

zmq _client代码如下:

#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include "/usr/local/include/zmq.h"
int main (void)
{
 printf ("Connecting to hello world server…\n");
 /*创建一个新的上下文*/
 void *context = zmq_ctx_new ();
 void *requester = zmq_socket (context, ZMQ_REQ);
 /*通过tcp协议,5555端口,连接本机服务端*/
 zmq_connect (requester, "tcp://localhost:5555");
 int request_nbr;
 for (request_nbr = 0; request_nbr != 10; request_nbr++)
 {
  char buffer [10];
  printf ("Sending Hello %d…\n", request_nbr);
  zmq_send (requester, "Hello", 5, 0);
  zmq_recv (requester, buffer, 10, 0);
  printf ("Received World %d\n", request_nbr);
 }
 zmq_close (requester);
 zmq_ctx_destroy (context);
 return 0;
}

zmq_server代码如下:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include "/usr/local/include/zmq.h"
int main (void)
{
 /*  Socket to talk to clients    */
 void *context = zmq_ctx_new ();
 void *responder = zmq_socket (context, ZMQ_REP);
 int rc = zmq_bind (responder, "tcp://*:5555");
 assert (rc == 0);
 while(1)
 {
  char buffer [10];
  zmq_recv (responder, buffer, 10, 0);
  printf ("Received Hello\n");
  sleep (1);          /*Do some 'work'*/
  zmq_send (responder, "World", 5, 0);
 }
 return 0;
}

编译zmq _client、zmq_server代码:
可以用Make编译

Makefile代码如下:

CC = gcc
CFLAGS = -std=gnu99 -Wall
PROGS = zmq_client.o
TARG = zmq_client

LINK_ZMQ = -I /usr/local/include -L /usr/local/lib -lzmq

all: $(PROGS)
         $(CC) $(CFLAGS) -o $(TARG) $^  $(LINK_ZMQ)

clean:
         rm -rf *.o *~ zmq_client

或者直接输入命令编译:

g++ -c -o zmq_client.o zmq_client.cpp
gcc -o zmq_client   zmq_client.o  -lzmq

编译成功会多出来两文件:
在这里插入图片描述

执行服务端命令:

./zmq_server

再开个命令窗口执行客户端:

./zmq_client

输出结果:

在这里插入图片描述
在这里插入图片描述

完成安装



编译成功:ZeroMQ-4.3.4版本

测试程序:ZeroMQ-4.3.4版本测试demo

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐