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

news/2024/12/22 21:40:45 标签: ubuntu, 网络, elasticsearch, linux, C/C++, 网络编程

在 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.niftyadmin.cn/n/5795925.html

相关文章

mysql,数据库数据备份

mysql 一.数据库备份概念1.备份分类2.备份策略3.备份三要素二.完全备份操作1.物理备份(还原),冷备份2.逻辑备份,温备份三.percona软件的xtrabackup工具备份(2备份,3还原),增量,差异1.percona软件安装2.增量备份(还原)3.差异备份四.binlog日志1.binlog日志概念2.查看binlog日志信…

Linux——卷

Linux——卷 介绍 最近做的项目&#xff0c;涉及到对系统的一些维护&#xff0c;有些盘没有使用&#xff0c;需要创建逻辑盘并挂载到指定目录下。有些软件需要依赖空的逻辑盘&#xff08;LVM&#xff09;。 先简单介绍一下卷的一些概念&#xff0c;有分区、物理存储介质、物…

【从零开始入门unity游戏开发之——C#篇21】C#面向对象的封装——`this`扩展方法、运算符重载、内部类、`partial` 定义分部类

文章目录 一、this扩展方法1、扩展方法的基本语法2、使用扩展方法3、扩展方法的注意事项5、扩展方法的限制6、总结 二、运算符重载1、C# 运算符重载2、运算符重载的基本语法3. 示例&#xff1a;重载加法运算符 ()4、使用重载的运算符5、支持重载的运算符6、不能重载的运算符7、…

String.prototype.padStart() 方法来实现日不足两位时补充零

你可以使用 String.prototype.padStart() 方法来实现日不足两位时补充零&#xff0c;这样代码更简洁。padStart() 会在字符串的前面填充指定的字符&#xff0c;直到字符串达到给定的长度。对于你的需求&#xff0c;padStart(2, 0) 会将 day 补充成两位数&#xff08;如果 day 是…

亚信安全与方天股份达成战略合作,双向奔赴助力数字化转型

近日&#xff0c;亚信安全科技股份有限公司&#xff08;以下简称“亚信安全”&#xff09;正式与青岛方天科技股份有限公司&#xff08;以下简称“方天股份”&#xff09;签订合作框架协议。双方强强携手&#xff0c;在网络安全运营平台共建、信息化项目安全支撑、政企市场拓展…

Elasticsearch:使用 Open Crawler 和 semantic text 进行语义搜索

作者&#xff1a;来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么&#xff1f; Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…

Vue(二)

1.Vue生命周期 Vue生命周期就是一个Vue实例从 创建 到 销毁 的整个过程。生命周期四个阶段&#xff1a; 创建阶段&#xff1a;创建响应式数据。 挂载阶段&#xff1a;渲染模板。 更新阶段&#xff1a;修改数据&#xff0c;更新视图。 销毁阶段&#xff1a;销毁Vue实例。 …

网络安全基础知识分享

目录 一. 网络安全的定义 二. 常见的网络安全威胁 三. 网络安全防范措施 四. 结语 随着数字化时代的到来&#xff0c;网络安全已成为全球范围内关注的热点问题。无论是个人用户&#xff0c;还是企业和政府机构&#xff0c;都面临着越来越多的网络安全威胁。黑客攻击、数据泄…