【C++集群聊天服务器(一)】|Linux平台资源受限下boost库和muduo网络库源码编译安装

本人使用的服务器是2G2核 ubuntu22.04

前置工作

muduo库源码github仓库地址:
muduo

WIndows和Linux平台的boost源码包下载(zip是Windows版,tar.gz是Linux版,你也可以去boost官网下载最新版本)
Boost C++ Libraries

由于muduo网络库是基于boost的,所以我们需要先编译Boost。

Linux下编译boost库

如果你的资源服务器硬件资源比较好的话,直接按这个步骤来即可:施磊老师博客

如果你的服务器和我的一样配置比较烂,那么可以参考我的配置方案

众所周知,boost库是非常大的,如果我们之间进行编译耗时好比较久,所以我们先明确:muduo库也只依赖boost库的一部分,所以我们可以进行选择性的编译。步骤如下

1.下载和解压Boost库
首先我们需要从官网下载boost源码,我这里是1.82.0

然后进行解压:

tar -xzf boost_1_82_0.tar.gz
cd boost_1_82_0

2.初始化Boost构建系统

./bootstrap.sh

3.编译与Muduo相关的组建

./b2 --with-system --with-thread --with-date_time --with-regex
#限制并行编译任务数量 -j1 或者 -j2 跟你的cpu核心数有关
./b2 --with-system --with-thread --with-date_time --with-regex -j1

编译成功后会有以下打印:

4.安装库文件和头文件
使用 b2 工具的 install 命令将编译生成的 Boost 组件安装到系统目录。默认情况下,这些文件会安装到 /usr/local/include 和 /usr/local/lib。

sudo ./b2 install --with-system --with-thread --with-date_time --with-regex

5.安装库缓存
安装完成后,需要更新动态链接库缓存,以便系统能够找到新安装的库文件。执行以下命令:

sudo ldconfig

6.验证安装
验证头文件和库文件是否安装在正确的位置。头文件通常在 /usr/local/include/boost 目录下,库文件在 /usr/local/lib 目录下。

ls /usr/local/include/boost
ls /usr/local/lib | grep boost

然后创建cpp文件,并且使用g++进行编译,编译时可以指定头文件和库文件的路径,但是由于我们已经把他们放在了系统默认的头文件和库文件目录,所以不指定也是可以编译的,编译脚本如下:

g++ -I/usr/local/include -L/usr/local/lib -lboost_system -lboost_thread -lboost_date_time -lboost_regex your_program.cpp -o your_program

测试代码如下:

#include <iostream>
#include <boost/bind.hpp>
#include <string>
using namespace std;class Hello
{
public:void say(string name) { cout << name << " say: hello world!" << endl; }
};int main()
{Hello h;auto func = boost::bind(&Hello::say, &h, "zhang san");func();return 0;
}

运行打印如下:

zhang san say: hello world!

Linux下编译muduo库

直接看施磊老师的博客就好了:
C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言| 输出*三角形

分析&#xff1a; ① 输入三角形主要分为两部分&#xff0c; 即输出空格和输出星号&#xff0c;要将它们分开&#xff0c;不用考虑空格数和星号个数之间的关系。 ② 从每行输出的空格个数来看&#xff0c;若总共输出n行&#xff0c;则第i行首先要输出n - i个空格&#xff0c;然…

基于java的CRM客户关系管理系统(二)

目录 第二章 相关技术介绍 2.1 后台介绍 2.1.1 B/S平台模式 2.1.2 MVC 2.1.3 Spring 2.1.4 Hibernate 2.1.5 Struts 2.2 前端介绍 2.2.1 JSP网页技术 2.3 开发工具 2.4 本章小结 前面内容请移步 基于java的CRM客户关系管理系统&#xff08;二&#xff09; 资源…

网络原理-TCP/IP --传输层(UDP)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 端口号UDP协议 端口号 我们在学习套接字的时候,涉及到两个概念:IP地址和端口号 IP地址是用来确定主机,这是网络层提供的概念 而端口号就是用来确定主机上的应用程序,就是传输层的概念的…

std::scoped_lock

scope--范围 当创建一个 std::scoped_lock 对象时&#xff0c;它尝试取得其所给互斥量的所有权,即上锁。当控制权离开创建 scoped_lock 对象的作用域时&#xff0c;scoped_lock 会被析构&#xff0c;互斥量随之被释放。 链接

代码随想录35期Day54-JavaScript

Day54题目 ### LeetCode739每日温度 核心思想:今天主要是学会单调栈的使用.找到比元素更大的下一个元素,如果比栈顶元素小就入栈,否则就出栈顶元素,当前元素就是比栈顶元素大的"下一个更大的元素". /*** param {number[]} temperatures* return {number[]}*/ var …

Linuxftp服务003虚拟用户登入

如果基于Vsftpd系统用户访问FTP服务器&#xff0c;系统用户越多越不利于管理&#xff0c;而且不利于系统安全管理&#xff0c;鉴于此&#xff0c;为了能更加的安全使用Vsftpd&#xff0c;需使用Vsftpd虚拟用户方式。 虚拟用户原理&#xff1a; 虚拟用户就是没有实际的真实系统…

CANDela studio新建和编辑服务

服务定义和编辑只能够在CDDT里面进行&#xff0c;思路分为三步&#xff1a; 1、Protocol Services里面添加服务&#xff0c;定义服务的格式、请求和正负响应。 2、根据服务的功能归类到Diagnostic Class Tenplates 3、Variant里面的Supported Diagnostic Classes勾选 然后我…

题目:回答结果(结构体变量传递)

题目&#xff1a;回答结果&#xff08;结构体变量传递&#xff09; There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about …

【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录 题目&#xff1a;跑步 思路&#xff1a; 题目&#xff1a;夏日漫步 思路&#xff1a; 题目&#xff1a;糖果促销 思路&#xff1a; 题目&#xff1a;第五维度 思路&#xff1a; 题目&#xff1a;公园 思路&#xff1a; 新材料 思路&#xff1a; 星际航行 思路…

Ubuntu基础使用

快捷键&#xff1a; 命令行打开快捷方式&#xff1a;Ctrl Alt T Ctrl l 清屏 截屏&#xff1a; LinuxOS命令&#xff1a; 显示当前工作目录所有内容&#xff1a;ls &#xff08;-a -l、-lh&#xff09; -a 输入全部内容&#xff08;包括隐藏文件&#xff09; -l 竖向展示…

CompassArena 司南大模型测评--代码编写

测试角度 要说测试模型&#xff0c;对咱们程序员来说&#xff0c;那自然是写代码的能力强不强比较重要了。那么下面我们以 leetcode 中的一道表面上是困难题的题目来考考各家大模型&#xff0c;看看哪个才应该是咱们日常写程序的帮手。 部分模型回答 问题部分如下截图&#…

GUI与Web前端:深入剖析与比较

GUI与Web前端&#xff1a;深入剖析与比较 在数字化时代的浪潮下&#xff0c;图形用户界面&#xff08;GUI&#xff09;和Web前端作为人机交互的两大关键领域&#xff0c;各自承载着不同的功能与价值。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对GUI和Web前…

Linux前奏-预热版本

一、操作系统概述 1.1 了解操作系统的作用 我们所熟知的计算机&#xff0c;也就是电脑&#xff0c;就是由硬件和软件来组成的 硬件&#xff1a;计算机系统中由电子机械&#xff0c;和各种光电元件等组成的各种物理装置的总称 软件是什么呢&#xff1f; 软件&#xff1a;用…

调查问卷和考试系统SurveyKing

什么是 SurveyKing &#xff1f; SurveyKing 是功能更强大的调查问卷、考试系统&#xff0c;很多功能体验超过问卷网、问卷星。支持在线考试/调查问卷/公开查询/题库刷题/投票。 软件特性 &#x1f947; 支持 20 多种题型&#xff0c;如填空、选择、下拉、级联、矩阵、分页、签…

【Java】Java主要知识点目录整理

一、Java SE概述 作者相关文章链接&#xff1a; 1、【Java】JavaSE概述-CSDN博客 Java SE&#xff08;Java Platform, Standard Edition&#xff09;是Java编程语言的标准版&#xff0c;主要用于开发桌面应用程序、控制台应用程序以及一些简单的中小型Web应用。以下是Java S…

QiuDN:新手友好的公益CDN

在数字化的今天&#xff0c;网站的速度将直接影响着用户体验和搜索引擎排名&#xff0c;因此&#xff0c;作为一名网站管理员&#xff0c;我一直在寻找能够提升网站速度的解决方案。在一次偶然的机会中&#xff0c;我了解到了QiuDN&#xff0c;一个公益性质的CDN。听创始人称丘…

Vue3-Ref Reactive toRef toRefs对比学习

响应式数据&#xff1a; Ref 作用&#xff1a;定义响应式变量。 语法&#xff1a;let xxx ref(初始值)(里面可以是任何规定内类型、数组等)。 返回值&#xff1a;一个RefImpl的实例对象&#xff0c;简称ref对象或ref&#xff0c;ref对象的value属性是响应式的。 注意点&am…

使用Python库Matplotlib绘制常用图表类型

使用Python库Matplotlib绘图 一、Matplotlib绘图参数设置1.1 设置分辨率和画布大小1.2 保存图片并设置边缘留白为紧凑型1.3 设置坐标轴标签1.4 画直线设置线宽和颜色1.5 画子图1.5.1 通过figure的add_subplot()画子图1.5.2 通过plt的subplots画子图 二、使用Matplotlib中scatte…

深入解析芯片背后的技术:揭开半导体产业的神秘面纱

引言&#xff1a; 在这个数字化、信息化的时代&#xff0c;芯片已经成为了现代科技发展的重要基石。从智能手机、电脑到汽车、物联网设备&#xff0c;芯片无处不在。然而&#xff0c;对于大多数人来说&#xff0c;芯片背后的技术仍然是一个神秘而遥不可及的领域。本文将深入解…

【Linux-阻塞,非阻塞,异步】

Linux-阻塞&#xff0c;非阻塞&#xff0c;异步 ■ Linux-阻塞-非阻塞 IO-异步■ Linux-阻塞IO■ 阻塞IO简介■ open■ 等待队列■ 示例一&#xff1a;APP阻塞IO读取进入睡眠后-等待队列唤醒进程■■ ■ Linux-非阻塞IO■ 非阻塞IO简介■ open■ 轮询■ 1、select 函数■ 2、po…