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/include
和 libzmq/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