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 无限循环,不 join
    return 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
相关推荐
苏宸啊3 分钟前
linux网络编程udp服务器和客户端代码编写(echo版本和字典版本)
linux·网络
~|Bernard|18 分钟前
Linux 定时任务(Cron)完整教程
linux·运维·服务器
小雪崩1 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法
奇树谦2 小时前
HDD 为什么适合顺序大文件读写:从 RAID 5 到 RAID 50 的原理与性能分析
linux·运维·网络
hi_ro_a2 小时前
Linux基础开发工具详解
linux·运维·服务器
嵌入式阿蔡2 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
Pocker_Spades_A3 小时前
终端里也能斗地主:Linux部署Ratel,从本地对战到公网联机
linux·运维·服务器
佳児素花痴╮3 小时前
C语言链接库
linux·运维·服务器
wWYy.4 小时前
Linux发送数据包的过程
linux·网络
小嵌同学4 小时前
Linux 内核中的 Per-CPU 机制详解
linux·运维·arm开发·嵌入式