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
相关推荐
风曦Kisaki9 小时前
#Linux数据库管理Day06:主从同步与MaxScale读写分离
linux·运维·数据库
小楼昨夜又东风12610 小时前
使用python快速拉包
linux
Tipriest_11 小时前
ubuntu创建和更换当前swap大小
linux·运维·ubuntu
WI8LbH78812 小时前
Ubuntu 部署Harbor
linux·运维·ubuntu
researcher-Jiang13 小时前
高性能计算之MPI:第一次MPI并行程序设计练习
linux·运维·服务器
Wireless_wifi613 小时前
Why Choose IPQ9574 for Your WiFi 7 Solution
linux·人工智能·5g
MYMOTOE613 小时前
国内对标腾讯 WorkBuddy 的桌面 AI 智能体软件大全
linux
小c君tt14 小时前
linux学习笔记1
linux·笔记·学习
RisunJan14 小时前
Linux命令-read(Bash 内建读取输入)
linux
CCPC不拿奖不改名16 小时前
Redis 工程化部署深度解析
linux·服务器·数据库·redis·深度学习·缓存·rag