一、环境准备:明确依赖与系统要求
1.1 系统版本要求
建议使用 Ubuntu 18.04/20.04 LTS 或 CentOS 7/8,本文以 Ubuntu 20.04 为例(CentOS 步骤仅包管理命令有差异,会特别标注)。
⚠️ 避坑点:不建议使用 Ubuntu 22.04 及以上版本,部分依赖库版本兼容问题会导致编译失败。
1.2 必装依赖库
muduo 依赖 C++11 标准、Boost 库、CMake、g++ 等工具,先通过包管理安装基础依赖:
# Ubuntu 系统
sudo apt update && sudo apt install -y build-essential cmake libboost-all-dev git
# CentOS 系统(需先安装 EPEL 源)
sudo yum install -y epel-release
sudo yum install -y gcc-c++ cmake boost-devel git
✅ 验证依赖:执行 g++ --version
(需 ≥ 5.4)、cmake --version
(需 ≥ 3.5)、boostversion
(需 ≥ 1.58),确保版本达标。
二、源码获取:两种可靠渠道(附避坑说明)
2.1 官方 GitHub 仓库(推荐)
直接克隆 muduo 官方源码,确保获取最新稳定版本:
# 克隆源码到本地(建议放在 /usr/local/src 目录,方便后续管理)
sudo mkdir -p /usr/local/src && cd /usr/local/src
sudo git clone https://github.com/chenshuo/muduo.git
⚠️ 避坑点:若克隆速度慢,可改用 Gitee 镜像仓库:
sudo git clone https://gitee.com/mirrors/muduo.git
2.2 版本选择
进入 muduo 目录后,建议切换到 稳定分支(避免直接使用 master 分支的开发版):
cd muduo
# 查看所有分支,选择最新的稳定版(如 v2.0.2)
git branch -r
# 切换到指定分支(以 v2.0.2 为例)
git checkout origin/v2.0.2
三、编译配置:核心步骤(含参数说明)
muduo 采用 CMake 构建,需先创建编译目录(避免污染源码),再指定安装路径。
3.1 创建编译目录并进入
# 在 muduo 源码根目录下创建 build 目录
mkdir build && cd build
3.2 执行 CMake 配置(关键参数)
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/muduo \
-DCMAKE_BUILD_TYPE=Release \
-DMUDUO_BUILD_EXAMPLES=OFF ..
参数说明:
DCMAKE_INSTALL_PREFIX
:指定安装路径(建议统一放在/usr/local/
下,后续引用方便);DCMAKE_BUILD_TYPE=Release
:编译 Release 版本(比 Debug 版本性能更高,适合生产环境);DMUDUO_BUILD_EXAMPLES=OFF
:关闭示例代码编译(减少编译时间,若需学习示例可改为 ON);..
:表示 CMakeLists.txt 在上级目录(源码根目录)。
⚠️ 避坑点:若执行 CMake 时提示 “Boost 版本不足”,需手动安装高版本 Boost(以 1.76.0 为例):
# 下载 Boost 1.76.0 源码
wget https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.gz
# 解压并编译安装
tar -zxvf boost_1_76_0.tar.gz && cd boost_1_76_0
./bootstrap.sh --prefix=/usr/local/boost
sudo ./b2 install
# 重新执行 CMake 时指定 Boost 路径
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/muduo \
-DCMAKE_BUILD_TYPE=Release \
-DBOOST_ROOT=/usr/local/boost \
-DMUDUO_BUILD_EXAMPLES=OFF ..
3.3 执行编译与安装
# 编译(-j 后面跟 CPU 核心数,加速编译,如 4 核则写 -j4)
make -j$(nproc)
# 安装(将编译产物复制到指定的 install 路径)
sudo make install
✅ 验证安装:进入 /usr/local/muduo
目录,若存在 include
(头文件)、lib
(库文件)目录,说明安装成功。
四、环境变量配置:让编译器找到 muduo
安装完成后,需配置环境变量,让 g++/CMake 能自动找到 muduo 的头文件和库文件,避免每次编译都手动指定路径。
4.1 配置头文件路径(C_INCLUDE_PATH/CPLUS_INCLUDE_PATH)
# 临时生效(当前终端)
export CPLUS_INCLUDE_PATH=/usr/local/muduo/include:$CPLUS_INCLUDE_PATH
# 永久生效(所有终端,需重启或 source 生效)
echo 'export CPLUS_INCLUDE_PATH=/usr/local/muduo/include:$CPLUS_INCLUDE_PATH' >> ~/.bashrc
4.2 配置库文件路径(LD_LIBRARY_PATH)
# 临时生效
export LD_LIBRARY_PATH=/usr/local/muduo/lib:$LD_LIBRARY_PATH
# 永久生效
echo 'export LD_LIBRARY_PATH=/usr/local/muduo/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
# 让配置立即生效
source ~/.bashrc
4.3 配置动态库缓存(可选,避免运行时找不到库)
# 将 muduo 库路径添加到系统动态库配置文件
sudo echo '/usr/local/muduo/lib' > /etc/ld.so.conf.d/muduo.conf
# 更新动态库缓存
sudo ldconfig
五、验证配置:编写测试代码(确保能正常使用)
5.1 编写测试代码(test_muduo.cpp)
创建一个简单的 TCP 服务器示例,验证 muduo 库是否能正常链接:
#include <muduo/net/TcpServer.h>
#include <muduo/base/Logging.h>
#include <boost/bind.hpp>
#include <iostream>
#include <string>
using namespace muduo;
using namespace muduo::net;
// 连接回调:新连接建立时触发
void onConnection(const TcpConnectionPtr& conn) {
LOG_INFO << "TcpConnection " << conn->name()
<< (conn->connected() ? " up" : " down");
}
// 消息回调:收到客户端数据时触发
void onMessage(const TcpConnectionPtr& conn, Buffer* buf, Timestamp time) {
string msg(buf->retrieveAllAsString());
LOG_INFO << conn->name() << " recv " << msg.size() << " bytes at "
<< time.toString();
conn->send(msg); // 回显客户端数据
}
int main() {
LOG_INFO << "pid = " << getpid();
EventLoop loop; // 事件循环(muduo 核心)
InetAddress listenAddr(8888); // 监听端口 8888
TcpServer server(&loop, listenAddr, "TestServer"); // 创建 TCP 服务器
// 设置回调函数
server.setConnectionCallback(onConnection);
server.setMessageCallback(onMessage);
server.start(); // 启动服务器(开始监听)
loop.loop(); // 启动事件循环(阻塞,处理网络事件)
return 0;
}
5.2 编译测试代码
使用 g++ 编译,需指定 muduo 的库文件(-lmuduo_net -lmuduo_base -lpthread
):
g++ test_muduo.cpp -o test_muduo -lmuduo_net -lmuduo_base -lpthread
⚠️ 避坑点:若编译时提示 “undefined reference to xxx”,检查环境变量是否配置正确,或手动指定头文件和库路径:
g++ test_muduo.cpp -o test_muduo \
-I/usr/local/muduo/include \
-L/usr/local/muduo/lib \
-lmuduo_net -lmuduo_base -lpthread
5.3 运行测试程序并验证
# 运行服务器
./test_muduo
# 另开一个终端,用 telnet 或 netcat 连接测试
telnet 127.0.0.1 8888
# 输入任意字符,若服务器回显相同字符,说明配置成功
✅ 成功标志:服务器终端输出连接日志(如 TcpConnection TestServer-0.0.0.0:8888-127.0.0.1:xxxx up
),客户端输入字符后能收到回显。
六、常见问题排查
问题现象 | 可能原因 | 解决方案 | |
---|---|---|---|
CMake 提示 “Boost not found” | Boost 未安装或路径未指定 | 1. 执行 sudo apt install libboost-all-dev ;2. 手动安装高版本 Boost 并通过 -DBOOST_ROOT 指定路径 |
|
编译时 “undefined reference to pthread” | 未链接 pthread 库 | 编译命令末尾添加 -lpthread |
|
运行时 “error while loading shared libraries: libmuduoxxx.so” | 动态库路径未配置 | 1. 执行 source ~/.bashrc ;2. 配置 /etc/ld.so.conf.d/muduo.conf 并 sudo ldconfig |
|
测试程序启动后,客户端无法连接 | 端口被占用或防火墙拦截 | 1. 用 `netstat -tulpn | grep 8888 检查端口;2. 关闭防火墙( sudo ufw disable`,Ubuntu) |
通过以上步骤,即可在 Linux 环境下完整配置 muduo 网络库,且能通过测试程序验证可用性。