在 Ubuntu 上安装 Muduo 网络库的详细指南

ops/2024/12/22 19:27:24/

在 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

http://www.ppmy.cn/ops/144102.html

相关文章

时间序列异常值处理方法

文章目录 一、删除法二、替换法三、插值法四、滑动窗口五、基于模型的替换 时间序列相关参考文章&#xff1a; 时间序列预测算法—ARIMA 时间序列预测算法—Prophet 时间序列分类任务—tsfresh python时间序列处理 有季节效应的非平稳序列分析 时间序列异常值检测方法 时间序列…

前端图表与数据可视化 - 2024 年实战与面试重点

前端图表与数据可视化 - 2024 年实战与面试重点 目录 前言前端数据可视化概述常用数据可视化库对比 3.1 D3.js3.2 ECharts3.3 Chart.js3.4 AntV 数据可视化中的实战技巧 4.1 如何选择合适的图表类型4.2 数据清洗与格式化4.3 响应式图表布局与交互 实战&#xff1a;构建实时数据…

6_HTML5 SVG (2) --[HTML5 API 学习之旅]

SVG 矩形 SVG&#xff08;Scalable Vector Graphics&#xff0c;可缩放矢量图形&#xff09;是一种基于 XML 的标记语言&#xff0c;用于描述二维图形。<rect> 是 SVG 中的一个基本形状元素&#xff0c;用来绘制矩形。下面我将提供四个不同场景下的 <rect> 示例&a…

网络安全——对称加密与非对称加密

对称加密与非对称加密是两种基本的加密技术&#xff0c;它们在保护数据安全方面起着重要作用。以下是对这两种加密技术的详细解释&#xff1a; 一、对称加密 定义&#xff1a;对称加密指的是加密和解密使用同一个密钥&#xff0c;也称为私钥加密或共享密钥加密。 原理&#x…

【Linux】socket编程1

socket编程1 1. 网络字节序2. ip地址转换函数3. sockaddr数据结构 1. 网络字节序 多字节数据有大端和小端之分&#xff0c;网络数据流采用大端字节序&#xff0c;如果主机采用的是小端字节序&#xff0c;那么需要转换。 大端&#xff1a;低地址存高字节&#xff0c;高地址存低…

Roblox踩坑1——动画无法完整播放

在做一款挂机类游戏的时候&#xff0c;打算给地图怪物做一个被击败动画&#xff0c;我就在击败怪物的回调里面加了一个动画&#xff0c;但是无论如何都没办法正常的播放。 if humanoid then-- 创建一个 Animation 实例并设置动画 IDlocal animation Instance.new("Anima…

simsCheckbox无序列表转换jquery插件

simsCheckbox是一款可以将普通的html无序列表转换为bootstrap样式的checkbox列表的jquery插件。 在线演示 下载 使用方法 在页面中引入bootstrap样式文件&#xff0c;jquery和simsCheckbox.css&#xff0c;以及simsCheckbox.js文件。 <link rel"stylesheet" hre…

【论文阅读】Deep Neural Network Pruning Using Persistent Homology

摘要和介绍 PHPM按照神经元之间的组合效应的大小的升序对DNN进行删减&#xff0c;以防止精度的下降&#xff0c;其中神经元之间的组合效应是利用一维PH计算的。 已经表明PH有利于分析DNN中知识的内部表示[6]&#xff0c;[23]。 [6] C. Corneanu, M. Madadi, S. Escalera, and…