Linux——Muduo库安装(包教包会)

/********************************************Muduo********************************************************/

是不是又遇到安装Muduo库不知道怎么安装的问题了?我来助你!

Muduo库是什么?

Muduo 是一个基于 Reactor 模式、高性能、线程安全的现代 C++ 网络库,由陈硕(@chenshuo)开发并开源。

Muduo 是 Linux 下 C++ 高性能网络编程领域的一个标杆库。其核心价值在于提供了一个清晰、高效、经过验证的多线程 Reactor 模型实现 (one loop per thread)。它极大地简化了开发高性能、线程安全的 TCP 网络服务的复杂度。如果你在 Linux 上使用 C++ 开发需要高性能网络通信的后端服务,Muduo 是一个非常值得深入研究和使用的优秀基础库。同时,它的源码本身也是学习高质量 C++ 编程和网络编程设计的宝贵资源。

陈硕的著作《Linux 多线程服务端编程:使用 muduo C++ 网络库》 是深入理解 Muduo 设计理念、C++ 多线程编程和网络编程的权威指南

注意!这玩意就是安装在Linux下的,因为它深度依赖epoll


Muduo库安装指南

目录


Muduo库安装指南

目录

安装包获取路径

1-拷贝muduo的源码压缩包muduo-master.zip到Linux系统下

2-运行build.sh源码编译构建程序

3-输入./build.sh install命令进行muduo库安装

验证

main.cpp

对你有所帮助的话,请留下点赞、关注、投币(虽然没有)再走吧~


安装包获取路径

1、https://github.com/chenshuo/muduo         从GitHub上进行获取资源进行下载

2、链接:https://pan.baidu.com/s/1Rqrnz8NY6UOiFemYQv-63Q 提取码:8nio       (较为推荐)

注意!muduo库是基于boost开发的,所以需要先在Linux平台上安装boost库

这也就意味着你得先安装boost,不要着急,我这自有法宝~

Linux——Boost库源码编译安装(包教包会)-优快云博客


1-拷贝muduo的源码压缩包muduo-master.zip到Linux系统下

同样的不知道怎么拷贝到Linux系统下,看看我安装Boost库的博客,通俗易懂

root@****-virtual-machine:/home/****/package# ls
muduo-master.zip
root@****-virtual-machine:/home/****/package# unzip muduo-master.zip

这里我将文件放在package文件夹下

解压一下,然后进入目录

root@****-virtual-machine:/home/****/package# ls
muduo-master  muduo-master.zip
root@****-virtual-machine:/home/****/package# cd muduo-master
root@****-virtual-machine:/home/****/package/muduo-master# ls
armlinux.diff  build.sh   clang.diff      Doxyfile  License      muduo         README
backport.diff  ChangeLog  CMakeLists.txt  examples  MacOSX.diff  premake4.lua  TODO

为了缩短耗时,我们可以将如下代码注释掉

root@****-virtual-machine:/home/****/package/muduo-master#vim CMakeLists.txt

然后即可保存退出


2-运行build.sh源码编译构建程序

注意:muduo是用cmake来构建的,需要先安装cmake,ubuntu下直接sudo apt-get install cmake就可以

注意:muduo网络库使用CMake作为其构建系统,因此在使用前需要确保系统已安装CMake构建工具。在Ubuntu/Debian等基于APT的Linux发行版中,可以通过以下步骤完成安装:

  1. 打开终端(Ctrl+Alt+T)
  2. 执行安装命令:
    sudo apt-get update
    sudo apt-get install cmake
    

  3. 验证安装是否成功:
    cmake --version
    

    正常安装后会显示CMake版本信息,如"cmake version 3.16.3"

对于其他Linux发行版:

  • Fedora/CentOS/RHEL: sudo yum install cmakesudo dnf install cmake
  • Arch Linux: sudo pacman -S cmake

CMake版本要求:

  • 建议使用CMake 3.5及以上版本
  • 某些新特性可能需要CMake 3.9+支持

安装完成后,即可

root@****-virtual-machine:/home/****/package/muduo-master# ./build.sh

最后下面显示[100%]即代表成功了!


3-输入./build.sh install命令进行muduo库安装

root@****-virtual-machine:/home/****/package/muduo-master# ./build.sh install

等待一段时间以后我们执行如下操作

root@****-virtual-machine:/home/****/package# ls
build  muduo-master  muduo-master.zip
root@****-virtual-machine:/home/****/package# cd build/
root@****-virtual-machine:/home/****/package/build# ls
release-cpp11  release-install-cpp11
root@****-virtual-machine:/home/****/package/build# cd release-install-cpp11/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# ls
include  lib

由于程序在运行时需要通过系统路径(如Linux的/usr/include/usr/lib目录,Windows的C:\Program FilesC:\Windows\System32目录)来查找相关的头文件和数据库链接库,而当前文件(如libexample.soexample.h)尚未被放置在系统路径中,这会导致编译或运行时出现"未找到文件"的错误。,需要将其移动至系统路径才能正常使用。

root@****-virtual-machine:/home/****/package/build/release-install-cpp11# ls
include  lib
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# cd include/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/include# ls
muduo
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/include# mv muduo/ /usr/include/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/include# cd ..
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# ls
include  lib
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# cd lib/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/lib# ls
libmuduo_base.a  libmuduo_http.a  libmuduo_inspect.a  libmuduo_net.a
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/lib# mv * /usr/local/lib/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/lib# 

操作流程至此基本完成。请严格遵循上述步骤执行,无需额外询问。特别建议切换至root用户以获得最高权限。

  • 执行前请确认当前用户权限
  • 建议通过sudo -isu -命令切换至root用户
  • 若无法获取root权限,请确保当前用户具有sudo权限


验证

main.cpp

#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++ main.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11
root@****-virtual-machine:/home/****/code# ./a.out 
20190404 08:00:15.254790Z 42660 INFO  pid = 42660 - main.cpp:61

等待客户端连接时,可开启新终端窗口,使用netcat命令模拟客户端来测试echo服务器的功能。

tony@****-virtual-machine:~$ echo "hello world" | nc localhost 8888
hello world

客户端打印类似如下内容就是成功了

root@****-virtual-machine:/home/****/code# ./a.out 
20190404 08:00:15.254790Z 42660 INFO  pid = 42660 - main.cpp:61
20190404 08:00:59.438626Z 42660 INFO  TcpServer::newConnection [EchoServer] - new connection [EchoServer-0.0.0.0:8888#1] from 127.0.0.1:33480 - TcpServer.cc:80
20190404 08:00:59.438707Z 42660 INFO  EchoServer - 127.0.0.1:33480 -> 127.0.0.1:8888 is UP - main.cpp:42
20190404 08:00:59.438812Z 42660 INFO  EchoServer-0.0.0.0:8888#1 echo 12 bytes, data received at 1554364859.438723 - main.cpp:53

好啦,到此为止你就可以去进行网络开发啦

对你有所帮助的话,请留下点赞、关注、投币(虽然没有)再走吧~


对了,如果想了解更多相关内容,可以:

  1. 查看我的往期文章Linux——Boost库源码编译安装(包教包会)-优快云博客C++实现简易连接池(详细版)上-优快云博客
  2. 在评论区留下你的想法
  3. 分享给更多需要的朋友

期待下次还能继续为你带来有价值的内容!我们下期再见~


/********************************************Muduo*********************************************************/

/********************************************continue*******************************************************/

### 安装muduoLinux系统的指南 #### 准备工作 为了确保顺利安装muduo网络,在开始之前需确认已安装必要的依赖项。通常情况下,这包括CMake以及Boost[^1]。 对于基于Debian/Ubuntu的发行版而言,可以通过包管理器apt-get来获取这些前置条件: ```bash sudo apt-get update && sudo apt-get install cmake libboost-all-dev ``` 而对于RedHat/CentOS,则应采用yum工具完成相同操作: ```bash sudo yum groupinstall "Development Tools" sudo yum install boost-devel cmake ``` #### 下载源码 访问[muduo官方GitHub仓](https://github.com/chenshuo/muduo),下载最新版本的压缩文件或者克隆整个项目到本地环境之中[^2]: ```bash git clone https://github.com/chenshuo/muduo.git cd muduo ``` #### 编译构建 利用CMake配置编译选项并执行实际编译过程。考虑到不同用户的个性化需求差异较大,默认设置可能并不完全适用所有人;因此建议先阅读README文档了解具体参数含义后再做调整[^3]。 ```bash mkdir build && cd build cmake .. make -j$(nproc) ``` 上述命令会创建名为`build`的新目录用于存放生成物,并行化地调用GNU Make来进行高效编译(-j标志后面接CPU核心数可以加快速度)[^4]。 #### 测试验证 成功完成后可运行测试案例检验是否一切正常运作。如果所有单元测试均通过则表明安装无误[^5]。 ```bash ./test_all ``` #### 完成部署 最后一步就是将编译好的共享对象(.so)复制至系统标准路径下以便其他程序能够轻松找到它们。当然也可以选择保持现状仅作为个人开发用途而不必移动位置[^6]。 ```bash sudo make install ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值