在 Ubuntu 上安装 Muduo 网络库的详细指南
首先一份好的安装教程是非常重要的
C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客
像这篇文章就和shit一样,安装到2%一定会卡住,如果你不幸用了这个那真是遭老罪了
环境:ubuntu 24.04
文章目录
- 在 Ubuntu 上安装 Muduo 网络库的详细指南
- 1. 更新系统包列表
- 2. 安装必要的依赖项
- 3. 克隆 Muduo 的源码仓库
- 4. 创建构建目录并编译
- 5. 安装 Muduo(可选)
- 6. 配置环境变量(如果需要)
- 7. 验证安装
- 8. 编写自己的项目
- 9.测试代码
- 常见问题及解决方案
1. 更新系统包列表
首先,确保你的系统包列表是最新的。
sudo apt-get update
sudo apt-get upgrade
2. 安装必要的依赖项
Muduo 依赖于一些基本的开发工具和库。安装这些依赖项:
sudo apt-get install -y git cmake g++ libboost-all-dev libssl-dev
- git:用于克隆 Muduo 的源码仓库。
- cmake:用于构建项目。
- g++:C++ 编译器。
- libboost-all-dev:Boost 库,Muduo 依赖于 Boost。
- libssl-dev:用于 SSL 支持(如果需要)。
3. 克隆 Muduo 的源码仓库
使用 git 克隆 Muduo 的源码。Muduo 的官方仓库托管在 GitHub 上。
git clone https://github.com/chenshuo/muduo.git
4. 创建构建目录并编译
进入 Muduo 源码目录,创建一个构建目录,并使用 CMake 进行编译。
cd muduo
mkdir build
cd build
cmake ..
make
5. 安装 Muduo(可选)
如果你希望将 Muduo 安装到系统目录,可以执行以下命令:
sudo make install
默认情况下,Muduo 会被安装到 /usr/local
目录下。如果需要自定义安装路径,可以在运行 cmake
时指定 CMAKE_INSTALL_PREFIX
:
cmake -DCMAKE_INSTALL_PREFIX=/your/custom/path ..
make
sudo make install
6. 配置环境变量(如果需要)
如果你将 Muduo 安装到了自定义路径,可能需要将库路径添加到 LD_LIBRARY_PATH
环境变量中。
export LD_LIBRARY_PATH=/your/custom/path/lib:$LD_LIBRARY_PATH
你可以将上述命令添加到 ~/.bashrc
或 ~/.profile
文件中,以便每次启动终端时自动设置。
7. 验证安装
你可以编译并运行 Muduo 提供的示例程序,确保安装成功。
cd ../examples
make
./echo_server
如果 echo_server
启动成功并监听指定端口,说明 Muduo 安装成功。
8. 编写自己的项目
在你的项目中使用 Muduo 时,需要在 CMakeLists.txt
中添加相应的配置。例如:
cmake_minimum_required(VERSION 3.10)
project(MyMuduoApp)
set(CMAKE_CXX_STANDARD 11)
find_package(muduo REQUIRED)
add_executable(MyMuduoApp main.cpp)
target_link_libraries(MyMuduoApp muduo_net muduo_base pthread)
确保 main.cpp
中包含 Muduo 的头文件并使用其功能。
9.测试代码
把muduo库的头文件和lib库文件拷贝完成以后,使用muduo库编写一个简单的echo回显服务器,测试muduo库是否可以正常使用,代码如下:
#include <muduo/net/TcpServer.h>
#include <muduo/base/Logging.h>
#include <boost/bind.hpp>
#include <muduo/net/EventLoop.h>
// 使用muduo开发回显服务器
class EchoServer
{
public:
EchoServer(muduo::net::EventLoop* loop,
const muduo::net::InetAddress& listenAddr);
void start();
private:
void onConnection(const muduo::net::TcpConnectionPtr& conn);
void onMessage(const muduo::net::TcpConnectionPtr& conn,
muduo::net::Buffer* buf,
muduo::Timestamp time);
muduo::net::TcpServer server_;
};
EchoServer::EchoServer(muduo::net::EventLoop* loop,
const muduo::net::InetAddress& listenAddr)
: server_(loop, listenAddr, "EchoServer")
{
server_.setConnectionCallback(
boost::bind(&EchoServer::onConnection, this, _1));
server_.setMessageCallback(
boost::bind(&EchoServer::onMessage, this, _1, _2, _3));
}
void EchoServer::start()
{
server_.start();
}
void EchoServer::onConnection(const muduo::net::TcpConnectionPtr& conn)
{
LOG_INFO << "EchoServer - " << conn->peerAddress().toIpPort() << " -> "
<< conn->localAddress().toIpPort() << " is "
<< (conn->connected() ? "UP" : "DOWN");
}
void EchoServer::onMessage(const muduo::net::TcpConnectionPtr& conn,
muduo::net::Buffer* buf,
muduo::Timestamp time)
{
// 接收到所有的消息,然后回显
muduo::string msg(buf->retrieveAllAsString());
LOG_INFO << conn->name() << " echo " << msg.size() << " bytes, "
<< "data received at " << time.toString();
conn->send(msg);
}
int main()
{
LOG_INFO << "pid = " << getpid();
muduo::net::EventLoop loop;
muduo::net::InetAddress listenAddr(8888);
EchoServer server(&loop, listenAddr);
server.start();
loop.loop();
}
使用g++进行编译,注意链接muduo和pthread的库文件,编译命令如下:
g++ main.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11
编译链接完成,生成a.out可执行程序,上面的echo服务器监听8888端口,运行上面的a.out回显服务器如下:
darling@darling:~/桌面$ ./a.out
20241221 06:50:24.057765Z 10774 INFO pid = 10774 - test.cpp:61
等待客户端连接,可以打开一个新的shell命令行用netcat命令模拟客户端连接echo服务器进行功能测试,命令如下:
darling@darling:~$ nc 127.0.0.1 8888
hello world
hello world
nihao a
nihao a
常见问题及解决方案
- Boost 版本问题:确保安装的 Boost 版本与 Muduo 兼容。一般来说,Ubuntu 仓库中的 Boost 版本是足够的。
- 权限问题:如果在安装过程中遇到权限问题,确保使用
sudo
执行需要权限的命令。 - 依赖缺失:如果编译过程中提示缺少依赖项,安装相应的开发包。例如,如果缺少
openssl
,可以安装libssl-dev
。