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
相关推荐
徐同保11 小时前
nginx转发,指向一个可以正常访问的网站
linux·服务器·nginx
HIT_Weston11 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿12 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin12 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
王阿巴和王咕噜16 小时前
【WSL】安装并配置适用于Linux的Windows子系统(WSL)
linux·运维·windows
布史16 小时前
Tailscale虚拟私有网络指南
linux·网络
水天需01017 小时前
shift 命令详解
linux
wdfk_prog17 小时前
[Linux]学习笔记系列 -- 内核支持与数据
linux·笔记·学习
Xの哲學17 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
深圳市恒讯科技17 小时前
Linux 文件权限指南:chmod 755、644、drwxr-xr-x 解析
linux·服务器·xr