如何Ubuntu 22.04.5 LTS 64 位 操作系统部署运行SLAM3! 详细流程

以下是在本地部署运行 ORB-SLAM3 的详细步骤,基于官方 README.md 和最佳实践整理,适用于 Ubuntu 16.04/18.04/20.04/22.04 系统:

一、系统要求与依赖项安装

1. 基础系统要求
  • 操作系统:Ubuntu 16.04/18.04/20.04/22.04(64 位)
  • 硬件:推荐 i7 及以上处理器(确保实时性能),支持 OpenGL 的显卡(用于 Pangolin 可视化)
2. 安装依赖项
# 安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git libgl1-mesa-glx# 安装Eigen3(线性代数库)
sudo apt install libeigen3-dev# 安装Python(用于轨迹评估,需numpy)
sudo apt install python3-numpy libpython3-dev# 安装OpenCV(3.2+,推荐4.x,22.04默认4.6.0+)
sudo apt install libopencv-dev python3-opencv# 安装Pangolin(可视化库)
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
cd .. && rm -rf Pangolin  # 清理临时文件

 3. 可选:安装 ROS(如需运行 ROS 节点)

Ubuntu 18.04 (Melodic)

sudo apt install ros-melodic-desktop-full
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

Ubuntu 22.04 (Humble)

sudo apt install ros-humble-desktop
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

这里因为考虑到很多安装SLAM3的朋友在本地都没有安装ROS2,所以这里更新一篇ROS2的安装教学。

报错解决:

这里我在运行:cmake .. -DCMAKE_BUILD_TYPE=Release的时候出现问题:

ZERO:/media/chengq/soft/Dev_soft/Slam3/Pangolin/build$ cmake .. -DCMAKE_BUILD_TYPE=Release
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- libpng Found and Enabled
-- libjpeg Found and Enabled
-- libtiff Found and Enabled
-- libopenexr Found and Enabled
-- Found Eigen: '/usr/include/eigen3'
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_egl_LIBRARYOPENGL_INCLUDE_DIR OpenGL EGL)
Call Stack (most recent call first):/usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)/usr/share/cmake-3.22/Modules/FindOpenGL.cmake:443 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)components/pango_opengl/CMakeLists.txt:49 (find_package)CMakeLists.txt:124 (include)-- Configuring incomplete, errors occurred!
See also "/media/chengq/soft/Dev_soft/Slam3/Pangolin/build/CMakeFiles/CMakeOutput.log".
chengq@chengq-ZERO:/media/chengq/soft/Dev_soft/Slam3/Pangolin/build$ cmake .. -DCMAKE_BUILD_TYPE=Release
-- libpng Found and Enabled
-- libjpeg Found and Enabled
-- libtiff Found and Enabled
-- libopenexr Found and Enabled
-- Found Eigen: '/usr/include/eigen3'
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_egl_LIBRARYOPENGL_INCLUDE_DIR OpenGL EGL)
Call Stack (most recent call first):/usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)/usr/share/cmake-3.22/Modules/FindOpenGL.cmake:443 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)components/pango_opengl/CMakeLists.txt:49 (find_package)CMakeLists.txt:124 (include)-- Configuring incomplete, errors occurred!
See also "/media/chengq/soft/Dev_soft/Slam3/Pangolin/build/CMakeFiles/CMakeOutput.log".

这个问题是由于缺少 OpenGL 开发库 导致的编译错误。以下是针对 Ubuntu 22.04 的解决步骤:

一、安装 OpenGL 开发库

sudo apt install -y libgl1-mesa-dev libglu1-mesa-dev libegl1-mesa-dev
  • libgl1-mesa-dev:提供 OpenGL 核心开发库(必装)。
  • libglu1-mesa-dev:提供 OpenGL 实用库(GLU)。
  • libegl1-mesa-dev:提供 EGL(Embedded Systems Graphics Library)开发库(Pangolin 可能依赖)。

二、安装 epoxy 开发库

sudo apt install -y libepoxy-dev
  • libepoxy-dev 包含 epoxy 的头文件和库文件,是 Pangolin 可视化模块的依赖项。

三、重新编译 Pangolin

# 清理之前的构建文件(可选)
cd .. && rm -rf build
mkdir build && cd build# 重新执行 CMake 配置
cmake .. -DCMAKE_BUILD_TYPE=Release

四、继续编译并安装

make -j$(nproc)  # 使用多核编译(加快速度)
sudo make install  # 安装到系统路径

二、克隆项目与构建

1. 克隆代码仓库
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
2. 编译项目
chmod +x build.sh
./build.sh  # 自动编译第三方库(DBoW2、g2o、Sophus)和ORB-SLAM3
  • 编译完成后,生成动态库 libORB_SLAM3.so 和可执行文件(位于 Examples 目录)。
3. 编译 ROS 节点(可选)
chmod +x build_ros.sh
./build_ros.sh  # 生成ROS节点,需已安装ROS

报错解决:

在执行 ./build.sh  # 自动编译第三方库(DBoW2、g2o、Sophus)和ORB-SLAM3 
编译的时候又出现错误: 执行到30% 左右无法编译。
报错:

/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/LoopClosing.cc: In member function ‘void ORB_SLAM3::LoopClosing::SearchAndFuse(const std::vector<ORB_SLAM3::KeyFrame*>&, std::vector<ORB_SLAM3::MapPoint*>&)’:/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/LoopClosing.cc:2161:9: warning: unused variable ‘total_replaces’ [-Wunused-variable]2161 |     int total_replaces = 0;|         ^~~~~~~~~~~~~~/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/Tracking.cc: In member function ‘void ORB_SLAM3::Tracking::Track()’:/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/Tracking.cc:2167:96: warning: comparison of integer expressions of different signedness: ‘long unsigned int’ and ‘int’ [-Wsign-compare]2167 |         if((mCurrentFrame.mnId<(mnLastRelocFrameId+mnFramesToResetIMU)) && (mCurrentFrame.mnId > mnFramesToResetIMU) &&|                                                                             ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/Tracking.cc: In member function ‘void ORB_SLAM3::Tracking::SearchLocalPoints()’:/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/Tracking.cc:3413:13: warning: unused variable ‘matches’ [-Wunused-variable]3413 |         int matches = matcher.SearchByProjection(mCurrentFrame, mvpLocalMapPoints, th, mpLocalMapper->mbFarPoints, mpLocalMapper->mThFarPoints);|             ^~~~~~~/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/Tracking.cc: In member function ‘void ORB_SLAM3::Tracking::UpdateFrameIMU(float, const ORB_SLAM3::IMU::Bias&, ORB_SLAM3::KeyFrame*)’:/media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3/src/Tracking.cc:3983:18: warning: unused variable ‘index’ [-Wunused-variable]3983 |     unsigned int index = mnFirstFrameId;|                  ^~~~~make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:76:CMakeFiles/ORB_SLAM3.dir/src/System.cc.o] 错误 1make[2]: *** 正在等待未完成的任务....make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:104:CMakeFiles/ORB_SLAM3.dir/src/LocalMapping.cc.o] 错误 1make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:118:CMakeFiles/ORB_SLAM3.dir/src/LoopClosing.cc.o] 错误 1make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:90:CMakeFiles/ORB_SLAM3.dir/src/Tracking.cc.o] 错误 1make[1]: *** [CMakeFiles/Makefile2:148:CMakeFiles/ORB_SLAM3.dir/all] 错误 2make: *** [Makefile:91:all] 错误 2

解决:

原因分析:

ORB-SLAM3 是一个相对较早的项目,主要基于 C++11 标准编写。在较新的 Ubuntu 版本(如 20.04 或 22.04)中,默认的 GCC/G++ 编译器版本比较高(通常是 GCC 9+ 或 GCC 11+),这些新版本的编译器默认使用的是 C++14 或 C++17 标准,并且对 C++语法和标准库的使用要求更严格。这常常会导致一些在 C++11 下没问题,但在 C++14/17 下会报错(或被视为错误)的代码。这是 ORB-SLAM3 在新系统上编译时非常常见的问题。

解决方案:

最常见的解决办法是告诉 CMake 在编译 ORB-SLAM3 时使用 C++11 标准进行编译。

  1. 修改 CMakeLists.txt 文件:

    • 进入 ORB_SLAM3 的根目录:cd /media/chengq/soft/Dev_soft/Slam3/ORB_SLAM3 (根据你的实际路径)
    • 打开根目录下的 CMakeLists.txt 文件进行编辑(可以使用 gedit, nano, vim 等编辑器): Bash
      gedit CMakeLists.txt
      # 或者
      nano CMakeLists.txt
      
    • 在文件的开头部分,通常在 cmake_minimum_required(...) 后面,添加或找到并修改以下行: CMake
      set(CMAKE_CXX_STANDARD 11)
      set(CMAKE_CXX_STANDARD_REQUIRED ON)
      
      如果已经有 set(CMAKE_CXX_STANDARD ...) 的行,确保它被设置为 11。如果这两行不存在,就直接添加到文件开头合适的位置(比如在 project(...) 之前或之后)。
  2. 清理之前的构建文件:

    • 由于 CMake 会缓存配置,在修改 CMakeLists.txt 后,需要清理之前失败的构建尝试生成的文件。进入 build 目录并删除所有内容: Bash
      cd build
      rm -rf *
      cd .. # 回到ORB_SLAM3根目录
      
    • 或者直接删除并重新创建 build 目录: Bash
      rm -rf build
      mkdir build
      
    • 重要提示: ORB-SLAM3 的 ./build.sh 脚本理论上应该处理 CMake 的配置和构建,但手动清理 build 目录能确保 CMake 从头开始配置,读取你修改后的 CMakeLists.txt
  3. 重新运行编译脚本:

    • 回到 ORB_SLAM3 的根目录,再次执行编译脚本: Bash
      ./build.sh

三、准备数据集与配置文件

1. 下载示例数据集
  • TUM RGB-D 数据集(用于 RGB-D 相机示例):
    从 TUM RGB-D 数据集 下载序列(如 fr1/xyz),解压后记录路径(如 ~/datasets/tum/fr1/xyz)。

  • EuRoC 数据集(用于立体 / 惯性示例):
    从 EuRoC 数据集 下载 ASL 格式序列,解压后修改 euroc_examples.sh 中的数据集路径。

2. 配置文件说明
  • 词汇表:已包含在 Vocabulary/ORBvoc.txt(无需额外下载)。
  • 相机参数文件
    • RGB-D 示例:Examples/RGB-D/TUM1.yaml(根据数据集修改分辨率、畸变参数)。
    • 立体 / 惯性示例:Examples/Stereo-Inertial/EuRoC.yaml(包含 IMU 参数和相机内参)。

四、运行示例程序

1. 运行 RGB-D 相机示例(以 TUM fr1/xyz 为例)

bash

# 格式:./Examples/RGB-D/rgbd_tum 词汇表路径 配置文件路径 图像路径 关联文件路径
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ~/datasets/tum/fr1/xyz ~/datasets/tum/fr1/xyz/associations.txt
  • 输出:Pangolin 窗口显示实时地图,终端输出轨迹信息,结果保存在 CameraTrajectory.txt
2. 运行立体惯性示例(EuRoC 数据集)

bash

# 格式:./Examples/Stereo-Inertial/stereo_inertial_euroc 词汇表路径 配置文件路径 数据集路径
./Examples/Stereo-Inertial/stereo_inertial_euroc Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml ~/datasets/euroc/V1_02_medium

3. 运行 ROS 节点(以单目为例)

bash

# 1. 设置ROS包路径(需先编辑~/.bashrc,添加以下行并source)
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/path/to/ORB_SLAM3/Examples/ROS# 2. 运行节点(格式:rosrun ORB_SLAM3 Mono 词汇表路径 配置文件路径)
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

五、常见问题与解决方案

1. 编译错误:第三方库未找到
  • 原因Thirdparty 目录下的库(如 g2o)编译失败。
  • 解决:手动编译第三方库:

    bash

    cd Thirdparty/g2o
    mkdir build && cd build
    cmake .. -DG2O_USE_CSPARSE=ON
    make -j$(nproc)
    cd ../../../
    
2. OpenCV 版本冲突(如 4.x 兼容性问题)
  • 报错undefined reference to cv::imread
  • 解决:修改代码中 OpenCV 函数(如 cv::IMREAD_COLOR 替换为 cv::ImreadModes::IMREAD_COLOR),或确保 CMake 正确链接系统 OpenCV 路径。
3. Pangolin 窗口无法显示
  • 原因:OpenGL 依赖缺失或版本不兼容。
  • 解决:安装 OpenGL 开发库:

    bash

    sudo apt install libglew-dev libglfw3-dev
    
4. ROS 话题映射错误
  • 原因:话题名称不匹配(如 /camera/image_raw 应为 /image_raw)。
  • 解决:修改 ROS 节点订阅的话题名称,或使用rosbag play重映射话题:

    bash

    rosbag play --remap /cam0/image_raw:=/image_raw dataset.bag
    

六、项目结构与扩展

  • 核心代码src/ 和 include/ 包含 SLAM 系统核心逻辑(跟踪、建图、回环检测)。
  • 示例程序Examples/ 目录按传感器类型分类(RGB-D、立体、惯性等),可参考示例编写自定义相机接口。
  • 配置文件Examples/ 下的.yaml文件定义相机内参、IMU 参数等,需根据实际传感器校准结果修改(参考Calibration_Tutorial.pdf)。

七、验证安装成功

  1. 运行示例后,Pangolin 窗口应显示 3D 地图和相机轨迹。
  2. 终端输出关键帧信息、跟踪状态(OK/LOST)及统计数据。
  3. 生成的轨迹文件(如CameraTrajectory.txt)可通过工具(如 Evince)查看或与真值对比。

按照以上步骤操作,即可在本地成功部署运行 ORB-SLAM3。如需自定义传感器(如鱼眼相机、自定义 IMU),需根据Calibration_Tutorial.pdf校准参数并修改配置文件,编译对应的示例程序。

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

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

相关文章

USB 共享神器 VirtualHere 局域网内远程使用打印机与扫描仪

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 很久之前,有分享过使用 CUPS 和路由器来实现局域网内共享打印机,但由于 SANE 支持的打印机较少以及扫描驱动的缺失,试了很多种方法都没有办法成功远程使用打印机的扫描功能。 后面偶然发现 VirtualHere 可以曲线…

一洽智能硬件行业解决方案探索与实践

一、智能硬件行业发展现状剖析 在数字化浪潮推动下&#xff0c;智能硬件行业呈现蓬勃发展态势。软硬件一体化的深度融合&#xff0c;构建起智能化服务的核心架构&#xff0c;而移动应用作为连接用户与设备的重要桥梁&#xff0c;其作用愈发关键。深入研究该行业&#xff0c;可…

【C++ 类和数据抽象】构造函数

目录 一、构造函数的基本概念 1.1 构造函数核心特性 1.2 构造函数的作用 1.3 构造函数类型体系 二、构造函数的类型 2.1 默认构造函数 2.2 带参数的构造函数 2.3 拷贝构造函数 2.4 移动构造函数&#xff08;C11 及以后&#xff09; 三、初始化关键技术 3.1 成员初始…

图数据库nebula测试指南

概述 Nebula是一个开源的分布式图数据库系统&#xff0c;专为处理超大规模关联数据而设计。可以将复杂的关联关系存在nebula图数据库中&#xff0c;提供可视化平台用于案件关联查询及调查。测试的前提是了解nebula图数据库&#xff0c;会使用基本的插入语句和查询语句&#xf…

dispaly: inline-flex 和 display: flex 的区别

display: inline-flex 和 display: flex 都是 CSS 中用于创建弹性盒子布局&#xff08;Flexbox&#xff09;的属性值&#xff0c;但它们之间有一些关键的区别&#xff0c;主要体现在元素如何在页面上被渲染和它们对周围元素的影响。 主要区别 1&#xff0c;块级 vs 行内块级 d…

Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例

sqlcmd https://learn.microsoft.com/zh-cn/sql/tools/sqlcmd/sqlcmd-connect-database-engine?viewsql-server-ver16 sqlcmd -S指定的数据库连接字符串必须有对应的有效的SPN信息&#xff0c;否则会报错SSPI Provider: Server not found in Kerberos database. 正常连接 1、…

电脑硬盘常见的几种接口类型

一、传统接口&#xff08;机械硬盘为主&#xff09; 1. SATA 接口&#xff08;Serial ATA&#xff09; 特点&#xff1a; 最主流的机械硬盘&#xff08;HDD&#xff09;接口&#xff0c;广泛用于台式机和笔记本电脑。传输速度较慢&#xff0c;理论最大带宽为 6 Gbps&#xff…

【前端HTML生成二维码——MQ】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前端HTML生成二维码——MQ 前言本文将介绍前端HTML如何更具用户输入的内容生成对应的二维码,附页面代码、实现函数、js脚本。一、自定义显示页面1、效果图二、使用步骤1、引入库2、实现函数3、页面及函数代…

研发效率破局之道阅读总结(3)工程优化

研发效率破局之道阅读总结(3)工程优化 Author: Once Day Date: 2025年4月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…

C# MP3 伴奏

使用建议&#xff1a; 参数调节指南&#xff1a; 低频人声残留&#xff1a;降低CenterFrequency(800-1500Hz) 高频人声残留&#xff1a;提高CenterFrequency(2500-3500Hz) 消除力度不足&#xff1a;提高EliminationStrength(0.9-1.0) 伴奏失真&#xff1a;降低EliminationSt…

大模型面经 | 春招、秋招算法面试常考八股文附答案(四)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…

Springboot 集成 RBAC 模型实战指南

RBAC 模型核心原理 详情可参考之前的笔记&#xff1a;https://blog.csdn.net/qq_35201802/article/details/146036789?spm1011.2415.3001.5331 RBAC 定义与优势 RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;** 是一种通过角色关联…

如何收集用户白屏/长时间无响应/接口超时问题

想象一下这样的场景:一位用户在午休时间打开某电商应用,准备购买一件心仪已久的商品。然而,页面加载了数秒后依然是一片空白,或者点击“加入购物车”按钮后没有任何反馈,甚至在结算时接口超时导致订单失败。用户的耐心被迅速消耗殆尽,关闭应用,转而选择了竞争对手的产品…

用户需求报告、系统需求规格说明书、软件需求规格说明的对比分析

用户需求报告、系统需求规格说明书&#xff08;SyRS&#xff09;和软件需求规格说明书&#xff08;SRS&#xff09;是需求工程中的关键文档&#xff0c;分别对应不同层次和视角的需求描述。以下是它们的核心区别对比&#xff1a; ​​1. 用户需求报告&#xff08;User Requirem…

iostat指令介绍

文章目录 1. 功能介绍2. 语法介绍3. 应用场景4. 示例分析 1. 功能介绍 iostat (input/output statistics)&#xff0c;是 Linux/Unix 系统中用于监控 CPU 使用率和 磁盘 I/O 性能的核心工具&#xff0c;可实时展示设备负载、吞吐量、队列状态等关键指标。 可以使用 man iostat查…

神经网络 “疑难杂症” 破解指南:梯度消失与爆炸全攻略(六)

引言 在神经网络的发展历程中&#xff0c;梯度消失和梯度爆炸如同两座难以翻越的大山&#xff0c;阻碍着深层神经网络发挥其强大的潜力。尤其是在处理复杂任务时&#xff0c;这两个问题可能导致模型训练陷入困境&#xff0c;无法达到预期的效果。本文将深入探讨梯度消失和梯度…

“多模态SCA+DevSecOps+SBOM风险情报预警 “数字供应链安全最佳管理体系!悬镜安全如何用AI守护万亿数字中国?

夜深人静&#xff0c;程序员青丝盯着屏幕上自动生成的代码模块陷入沉思。在AI大模型的加持下&#xff0c;仅用一周团队就完成了原本需要半年的开发进度&#xff0c;但代码审查时却发现了不少高危漏洞。“生成效率提升了&#xff0c;但安全漏洞像定时炸弹一样藏在代码里”&#…

Node.js简介(nvm使用)

Node.js是一个基于Chrome V8 JavaScript引擎构建的开源、跨平台JavaScript运行环境。它允许开发者在服务器端运行JavaScript代码&#xff0c;从而实现前后端统一的开发语言。Node.js具有事件驱动、非阻塞I/O模型&#xff0c;使其非常适合于构建高性能的网络应用。 Node.js不是…

PHP日志会对服务器产生哪些影响?

PHP日志是服务器运维中非常重要的一部分&#xff0c;但处理不当会对服务器产生明显的负面影响。下面我们从多个维度深入分析&#xff1a;PHP日志的作用、类型、对服务器的正面与负面影响&#xff0c;以及优化建议&#xff0c;让你全面掌握这一问题。 一、PHP日志是什么? PHP…

Spring AI Alibaba-02-多轮对话记忆、持久化消息记录

Spring AI Alibaba-02-多轮对话记忆、持久化消息记录 Lison <dreamlison163.com>, v1.0.0, 2025.04.19 文章目录 Spring AI Alibaba-02-多轮对话记忆、持久化消息记录多轮对话对话持久-Redis 本次主要聚焦于多轮对话功能的实现&#xff0c;后续会逐步增加更多实用内容&…