银河麒麟(Kylin) - V10 SP2高级服务器操作系统ARM64编译ZeroMQ-4.3.4版本
银河麒麟(Kylin) - V10 SP2高级服务器操作系统ARM64编译ZeroMQ-4.3.4版本
银河麒麟(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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)