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 无限循环,不 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