当前位置: 首页 > ai >正文

ZeroMQ 编译 项目使用流程文档

ZeroMQ 编译 & 项目使用流程文档

1. 安装依赖

在 Ubuntu 18.04 上先准备构建环境:

sudo apt-get update
sudo apt-get install -y git build-essential cmake pkg-config libtool autoconf automake

2. 下载 & 编译 ZeroMQ

cd ~/code
git clone https://github.com/zeromq/libzmq.git
cd libzmq# 创建 build 目录并指定安装路径到 build/install
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$(pwd)/install
make -j$(nproc)
make install

安装完成后,目录结构如下:

libzmq/build/install/
├── include/     # 头文件 (zmq.h, zmq_utils.h)
└── lib/         # 库文件 (libzmq.so, libzmq.a, cmake 配置)

3. 创建测试项目

新建项目目录结构:

/code/zmqtest
├── CMakeLists.txt
├── lib
│   ├── include      # 拷贝 libzmq/build/install/include
│   └── lib          # 拷贝 libzmq/build/install/lib
└── src└── main.cpp

libzmq/build/install/includelibzmq/build/install/lib 复制到 zmqtest/lib/ 下,保持结构一致。


4. 测试代码

src/main.cpp 示例(一个 server + client 的简单通信 demo):

#include <zmq.h>
#include <string.h>
#include <iostream>
#include <thread>
#include <unistd.h>// 服务端线程
void server_task() {void* context = zmq_ctx_new();void* responder = zmq_socket(context, ZMQ_REP);zmq_bind(responder, "tcp://*:5555");while (true) {char buffer[10] = {0};zmq_recv(responder, buffer, 10, 0);std::cout << "Server received: " << buffer << std::endl;sleep(1);zmq_send(responder, "World", 5, 0);}zmq_close(responder);zmq_ctx_destroy(context);
}// 客户端线程
void client_task() {void* context = zmq_ctx_new();void* requester = zmq_socket(context, ZMQ_REQ);zmq_connect(requester, "tcp://localhost:5555");for (int i = 0; i < 5; i++) {const char* msg = "Hello";std::cout << "Client sending: " << msg << std::endl;zmq_send(requester, msg, strlen(msg), 0);char buffer[10] = {0};zmq_recv(requester, buffer, 10, 0);std::cout << "Client received: " << buffer << std::endl;}zmq_close(requester);zmq_ctx_destroy(context);
}int main() {std::thread server(server_task);sleep(1); // 等待服务端启动std::thread client(client_task);client.join();// server 无限循环,不 joinreturn 0;
}

5. CMake 配置

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(zmqtest)set(CMAKE_CXX_STANDARD 11)# 指定头文件和库路径
include_directories(${CMAKE_SOURCE_DIR}/lib/include)
link_directories(${CMAKE_SOURCE_DIR}/lib/lib)add_executable(zmqtest src/main.cpp)
# ZeroMQ 依赖 pthread,一定要加上
target_link_libraries(zmqtest zmq pthread)

6. 编译 & 运行

cd /code/zmqtest
mkdir build && cd build
cmake ..
make -j$(nproc)
./zmqtest
http://www.xdnf.cn/news/20036.html

相关文章:

  • Android 生命周期函数调用原理
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(3)
  • 2025年数学建模国赛参考论文发布
  • 从碎片化到一体化:Java分布式缓存的“三级跳”实战
  • Spring Security 深度学习(六): RESTful API 安全与 JWT
  • 服务器IP暴露被攻击了怎么办?
  • 微算法科技 (NASDAQ:MLGO)利用量子密钥分发QKD技术,增强区块链系统的抗攻击能力
  • 自动化运维-ansible中对roles的创建与使用
  • 数据无言,网关有声 耐达讯自动化RS485转Profinet让千年液位数据“开口说话”
  • 在VSCode中更新或安装最新版的npx和uv工具
  • 数码视讯TR100-OTT-G1_国科GK6323_安卓9_广东联通原机修改-TTL烧录包-可救砖
  • 容器的定义及工作原理
  • 【华为Mate XTs 非凡大师】麒麟芯片回归:Mate XTs搭载麒麟9020,鸿蒙5.1体验新境界
  • Java 21 虚拟线程微服务进阶实战:2 个企业级场景源码 + 底层调度原理 + 性能调优指南
  • 艾克斯图片转换器,不只图片压缩
  • 音响皇帝BO,牵手全球第一AR眼镜雷鸟,耳机党坐不住了?
  • Kafka 内存池MemoryPool 设计
  • 海盗王64位dx9客户端修改篇之五
  • 别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!
  • 《sklearn机器学习——回归指标1》
  • Linux中的fork详解
  • 好看的背景颜色 uniapp+小程序
  • vue3+ts导出PDF
  • 力扣55:跳跃游戏
  • 每周资讯 | 中国游戏市场将在2025年突破500亿美元;《恋与深空》收入突破50亿元
  • 52核心52线程,Intel下一代CPU憋了个大的
  • uni-app 项目 iOS 上架踩坑经验总结 从证书到审核的避坑指南
  • 一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)
  • 为什么要用VR全景?5个答案告诉你
  • 用户眼中的VR自来水厂之旅