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
相关推荐
minji...13 分钟前
linux 进程控制(一) (fork进程创建,exit进程终止)
linux·运维·服务器·c++·git·算法
I · T · LUCKYBOOM16 分钟前
21.Linux网络设置
linux·运维·网络
Likeyou718 分钟前
关于Linux下的Oracle的rman备份操作指南
linux·运维·oracle
峰顶听歌的鲸鱼22 分钟前
13.docker部署
linux·运维·笔记·docker·容器·云计算
橘子编程24 分钟前
仓颉语言变量与表达式解析
java·linux·服务器·开发语言·数据库·python·mysql
虚神界熊孩儿30 分钟前
linux下创建用户和用户组
linux·运维·服务器
hhwyqwqhhwy32 分钟前
linux 驱动 rtc
linux·运维·实时音视频
python百炼成钢34 分钟前
53.Linux regmap驱动框架
linux·运维·服务器·驱动开发
python百炼成钢37 分钟前
54.Linux IIO驱动框架
linux·运维·服务器·驱动开发
纷飞梦雪38 分钟前
ubuntu22开启root
linux·运维·ubuntu