ORB-SLAM2编译、安装等问题汇总大全(Ubuntu20.04、eigen3、pangolin0.5、opencv3.4.10)
ORB-SLAM2编译、安装等问题汇总大全(Ubuntu20.04、eigen3、pangolin0.5、opencv3.4.10)
1:环境说明:
使用的Linux发行版本为Ubuntu 20.04
SLAM2下载地址为:git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
2:eigen版本为 3.2.10
下载地址:https://eigen.tuxfamily.org/index.php?title=Main_Page
3:pangolin版本为0.5,高版本在编译ORB-SLAM2时会出现很多问题
下载地址:https://github.com/stevenlovegrove/Pangolin/tree/v0.5
卸载pangolin:https://blog.csdn.net/qq_42257666/article/details/126069335
4:opencv版本为3.4.10,这个版本不会报错
下载地址:https://github.com/opencv/opencv/releases/tag/3.4.10
5:数据
数据下载地址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download
1.安装:eigen版本为 3.2.10
1.1安装步骤
1:安装命令
cd eigen-3.2.10
mkdir build
cd build
cmake..
sudo make install
sudo cp -r /usr/local/include/eigen3 /usr/include
2:查看当前版本,验证是否安装成功
pkg-config --modversion eigen3
2.卸载eigen3
1:查询当前版本
pkg-config --modversion eigen3
2:查看eigen3位置相关文件
sudo updatedb
locate eigen3
3:删除eigen3相关文件
sudo rm -rf /usr/include/eigen3
sudo rm -rf /usr/lib/cmake/eigen3
sudo rm -rf /usr/local/include/eigen3
sudo rm -rf /usr/share/doc/libeigen3-dev
sudo rm -rf /usr/local/share/pkgconfig/eigen3.pc /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
sudo rm -rf /usr/local/lib/pkgconfig/eigen3.pc
sudo rm -rf /usr/local/share/eigen3
4:查询是否已经删除
pkg-config --modversion eigen3
3:安装opencv
1:安装依赖
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
2:编译安装
在 opencv-3.4.10文件夹中建立名为 build的文件夹,在build 目录下执行 cmake 和 make。
mkdir buildcd buildcmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..make -j8
sudo make install
3:环境配置
动态库配置
sudo gedit /etc/ld.so.conf.d/opencv.conf
添加
/usr/local/lib
保存后,终端内执行
sudo ldconfig
更新 PKG_CONFIG_PATH
sudo gedit /etc/bash.bashrc
文末添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
4:保存后,终端执行
source /etc/bash.bashrc
sudo updatedb
若出现 sudo: updatedb: command not found,执行 sudo apt install mlocate 后再次操作即可。
5:验证
pkg-config opencv --modversionpkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs opencv
4:安装Realsense SDK
1:下载source
git clone https://github.com/IntelRealSense/librealsense
cd librealsense
2:安装依赖项
sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev
3:Install Intel Realsense permission scripts located in librealsense source directory:
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
4:这边需要注意把realsense拔下来
Build and apply patched kernel modules for:
根据不同的ubuntu版本安装:对于Ubuntu 14/16/18 LTS
./scripts/patch-realsense-ubuntu-lts.sh
sudo dmesg | tail -n 50
这里可以看一下UVC是否安装成功了
5:基于cmake的编译
mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make
sudo make install
-DBUILD_EXAMPLES=true 这个选项表示带演示和教程的
6:进入/librealsense/build/examples/capture,试一下效果
./rs-capture

5:ros下驱动realsense相机获取点云
安装依赖
sudo apt-get install ros-$ROS_DISTRO-realsense2-camera
方法1:
1:查看内核版本
uname -r : 显示操作系统的发行版号
如果>=4.4.0-50的版本就可以继续向下进行了,否则需要升级你的Ubuntu内核。
读取点云
2:安装rgbd.launch
cd ~/catkin_ws/src/git clone https://github.com/ros-drivers/rgbd_launch.gitcd ..catkin_make
将rs_rgbd.launch和rs_camera.launch文件中的<arg name="enable_pointcloud" default="false"/>由false改为true
roslaunch realsense2_camera rs_rgbd.launch
点击add 选择PointCloud2进行display,选择Fixed Frame和Topic,如图所示

方法2:
1:建立workspace,已经有的可以跳过
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
catkin_init_workspace
cd ..
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
2:在catkin_ws/src/下载源程序
cd src
git clone https://github.com/intel-ros/realsense.git
3:catkin_make
cd ..
catkin_make
4:如果没有错误说明,已经装好了,启动相机节点
roslaunch realsense2_camera rs_rgbd.launch
5:看一下发布的topic
rostopic list
内参获取
6:若不进行标定,可以先从Realsense ROS Wrapper发布的topic中获得相机的内参。
rostopic echo /camera/color/camera_info
rostopic echo /camera/aligned_depth_to_color/camera_info
3:方法3 Step3 安装基于ROS使用RealSense的包
官方教程
1:安装
mkdir -p ~/catkin_ws/srccd ~/catkin_ws/src/Clone the latest Intel® RealSense™ ROS from here into ‘catkin_ws/src/’把realsense这个文件下载/克隆到该目录下catkin_init_workspacecd ..catkin_make cleancatkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Releasecatkin_make installecho "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrcsource ~/.bashrc
2:检验是否能在ros使用realsense相机:
install rgbd_launchsudo apt-get install ros-kinetic-rgbd-launchroslaunch realsense2_camera rs_rgbd.launch再打开一个终端,输入rviz此时并不能看到什么结果左上角 Displays 中 Fixed Frame 选项中,下拉菜单选择 camera_link这是主要到Global Status变成了绿色点击该框中的Add -> 上方点击 By topic -> /depth_registered 下的 /points 下的/PointCloud2点击该框中的Add -> 上方点击 By topic -> /color 下的 /image_raw 下的image
见下图:



6:下载ORB_SLAM2:
下载ORB_SLAM2
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
2:修改build.sh文件
这时候打开文件夹里的build.sh文件,默认是make -j,如果不改容易引起系统卡死。改为make -j4即可(数字为电脑CPU的核心数),或者去掉-j。

2.1:如果多线程编译错误
把build.sh的make -j改成make(这是为了防止多线程编译出错,对于build_ros.sh文件也是同理,下面就不说了)
3:为了避免编译时出现usleep的错误,相应文件添加 #include<unistd.h>,具体有
/src/LocalMapping.cc
/src/System.cc
/src/LoopClosing.cc
/src/Tracking.cc
/src/Viewer.cc
/Examples/Monocular/mono_tum.cc
/Examples/Monocular/mono_kitti.cc
/Examples/Monocular/mono_euroc.cc
/Examples/RGB-D/rgbd_tum.cc
/Examples/Stereo/stereo_kitti.cc
/Examples/Stereo/stereo_euroc.cc
4:编译安装
cd ORB_SLAM2
chmod +x build.sh
运行build.sh
./build.sh
5:下载数据集
我使用的是TUM数据集,在
https://vision.in.tum.de/data/datasets/rgbd-dataset/download
6:下载rgbd_dataset_freiburg1_xyz即可,解压
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml PATH_TO_SEQUENCE_FOLDER
PATH_TO_SEQUENCE_FOLDER是你文件的地址。
然后就开始运行例程了,贴图:

7:将PATH_TO_SEQUENCE_FOLDER更换成下载后的文件的地址。
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/ubicast/data/rgbd_dataset_freiburg1_xyz
7:编辑报错
1: 报错及处理:error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope
参考:https://blog.csdn.net/Robert_Q/article/details/121690089
2:详细报错信息
/home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp: In function ‘std::__cxx11::string pangolin::FfmpegFmtToString(AVPixelFormat)’:
/home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp:41:41: error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope
参考:https://github.com/stevenlovegrove/Pangolin/pull/318/files?diff=split&w=0
3:解决办法:在/Pangolin/CMakeModules/FindFFMPEG.cmake中63,64行
3.1:更改代码
sizeof(AVFormatContext::max_analyze_duration2);}" HAVE_FFMPEG_MAX_ANALYZE_DURATION2
换成
sizeof(AVFormatContext::max_analyze_duration);}" HAVE_FFMPEG_MAX_ANALYZE_DURATION
3.2:/Pangolin/src/video/drivers/ffmpeg.cpp中第37行 namespace pangolin上面加上
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
3.3:更改代码第78,79行
TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC);
TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
改为
#ifdef FF_API_XVMCTEST_PIX_FMT_RETURN(XVMC_MPEG2_MC);TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
#endif
3.4:更改代码101-105行
TEST_PIX_FMT_RETURN(VDPAU_H264);TEST_PIX_FMT_RETURN(VDPAU_MPEG1);TEST_PIX_FMT_RETURN(VDPAU_MPEG2);TEST_PIX_FMT_RETURN(VDPAU_WMV3);TEST_PIX_FMT_RETURN(VDPAU_VC1);
改为
#ifdef FF_API_VDPAUTEST_PIX_FMT_RETURN(VDPAU_H264);TEST_PIX_FMT_RETURN(VDPAU_MPEG1);TEST_PIX_FMT_RETURN(VDPAU_MPEG2);TEST_PIX_FMT_RETURN(VDPAU_WMV3);TEST_PIX_FMT_RETURN(VDPAU_VC1);
#endif
3.5:更改代码第127行
TEST_PIX_FMT_RETURN(VDPAU_MPEG4);
改为
#ifdef FF_API_VDPAUTEST_PIX_FMT_RETURN(VDPAU_MPEG4);
#endif
4:error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
#define TEST_PIX_FMT_RETURN(fmt) case AV_PIX_FMT_##fmt: return #fmt; /home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp: In memberfunction ‘voidpangolin::FfmpegVideoOutputStream::WriteFrame(AVFrame*)’:/home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp:572:39:error: ‘AVFMT_RAWPICTURE’ was not declared in this scopeif (recorder.oc->oformat->flags & AVFMT_RAWPICTURE) {
4.1:解决办法,在Pangolin/include/pangolin/video/drivers/ffmpeg.h开头加上
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
2:报错:error: static assertion failed: std::map must have the same value_type as its allocato
/usr/include/c++/8.1.0/bits/stl_map.h: In instantiation of ‘class std::map<ORB_SLAM2::KeyFrame*, g2o::Sim3, std::less<ORB_SLAM2::KeyFrame*>, Eigen::aligned_allocator<std::pair<const ORB_SLAM2::KeyFrame*, g2o::Sim3> > >’:
/home/zach/Projects/ORB-SLAM/ORB_SLAM2/src/Optimizer.cc:818:37: required from here
/usr/include/c++/8.1.0/bits/stl_map.h:122:21: error: static assertion failed: std::map must have the same value_type as its allocatorstatic_assert(is_same<typename _Alloc::value_type, value_type>::value,
这个可以参考
https://github.com/raulmur/ORB_SLAM2/pull/585
这篇文字上的解答,具体需要:

相关文章:
ORB-SLAM2编译、安装等问题汇总大全(Ubuntu20.04、eigen3、pangolin0.5、opencv3.4.10)
ORB-SLAM2编译、安装等问题汇总大全(Ubuntu20.04、eigen3、pangolin0.5、opencv3.4.10) 1:环境说明: 使用的Linux发行版本为Ubuntu 20.04 SLAM2下载地址为:git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 2&a…...
QuickBuck:一款专为安全研究人员设计的勒索软件模拟器
关于QuickBuck QuickBuck是一款基于Golang开发的勒索软件模拟工具,在该工具的帮助下,广大研究人员可以通过更简单的方法来判断反病毒保护方案是否能够有效地预防勒索软件的攻击。 功能介绍 该工具能够模拟下列勒索软件典型行为,其中包括&a…...
【八大数据排序法】堆积树排序法的图形理解和案例实现 | C++
第二十一章 堆积树排序法 目录 第二十一章 堆积树排序法 ●前言 ●认识排序 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ● 总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增…...
低代码开发平台|生产管理-生产加工搭建指南
1、简介1.1、案例简介本文将介绍,如何搭建生产管理-生产加工。1.2、应用场景在主生产计划列表中下达加工后,在加工单列表可操作领料、质检。2、设置方法2.1、表单搭建1)新建表单【产品结构清单(BOM)】,字段…...
Python类型-语句-函数
文章目录类型动态类型:变量类型会随着程序的运行发生改变注释控制台控制台输入input()运算符算术关系逻辑赋值总结语句判断语句while循环for循环函数链式调用和嵌套调用递归关键字传参在C/java中,整数除以整数结果还是整数,并不会将小数部分舍弃…...
真兰仪表在创业板开启申购:募资约20亿元,IPO市值约为78亿元
2月9日,上海真兰仪表科技股份有限公司(下称“真兰仪表”,SZ:301303)开启申购,将在深圳证券交易所创业板上市。本次上市,真兰仪表的发行价为26.80元/股,市盈率43.06倍。 据贝多财经了解…...
【2023】Prometheus-Prometheus与Alertmanager配置详解
记录一下Prometheus与Alertmanager的配置参数等内容 目录1.Prometheus1.1.prometheus.yml1.2.告警规则定义2.alertmanager2.1.alertmanager.yml2.1.1.global:全局配置2.1.1.1.以email方式作为告警发送方2.1.1.2.以wechat方式作为告警发送方2.1.1.3.以webhook方式作为…...
华为HCIE学习之openstack基础
文章目录一、Openstack各种文件位置二、Openstack命令操作1.使用帮助三、用命令发放云主机1、创建租户2、创建用户并与租户绑定3、注册镜像4、创建规格5、创建公有网络及其子网(做弹性IP用)6、创建私有网络及其子网7、创建路由并设置网关与端口8、创建安…...
Python实现贝叶斯优化器(Bayes_opt)优化BP神经网络分类模型(BP神经网络分类算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景贝叶斯优化器(BayesianOptimization) 是一种黑盒子优化器,用来寻找最优参数。贝叶斯优化器是基…...
Elasticsearch(九)搜索---搜索辅助功能(下)--搜索性能分析
一、前言 上篇文章我们学习了ES的搜索辅助功能的一部分–分别是指定搜索返回的字段,搜索结果计数,分页,那么本次我们来学习一下ES的性能分析相关功能。 二、ES性能分析 在使用ES的过程中,有的搜索请求的响应比较慢,…...
化繁为简|中信建投基于StarRocks构建统一查询服务平台
近年来,在证券服务逐渐互联网化,以及券商牌照红利逐渐消退的行业背景下,中信建投不断加大对数字化的投入,尤其重视数据基础设施的建设,期望在客户服务、经营管理等多方面由经验依赖向数据驱动转变,从而提高…...
2023数字中国创新大赛·数据开发赛道首批赛题启动报名
由数字中国建设峰会组委会主办的2023数字中国创新大赛(DCIC 2023)已正式启幕,本届大赛结合当下数字技术发展的热点和业界关注的焦点,面向产业实际需求设置了九大赛道。其中,数据开发赛道2月8日正式上线首批赛题&#x…...
MySQL数据库
1.MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景? 1.1事务处理上方面 MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。 InnoDB:提供事务…...
鸿蒙设备学习|快速上手BearPi-HM Micro开发板
系列文章目录 第一章 鸿蒙设备学习|初识BearPi-HM Micro开发板 第二章 鸿蒙设备学习|快速上手BearPi-HM Micro开发板 文章目录系列文章目录前言一、环境要求1.硬件要求2.软件要求3.Linux构建工具要求4.Windows开发工具要求5.工具下载地址二、安装编译基础环境1.安装Linux编译环…...
软件测试标准流程
软件测试的基本流程大概要经历四个阶段,分别是制定测试计划、测试需求分析、测试用例设计与编写以及测试用例评审。因此软件测试的工作内容,远远没有许多人想象的只是找出bug那么简单。准确的说,从一个项目立项以后,软件测试从业者…...
Python身份运算符
Python身份运算符身份运算符用于比较两个对象的存储单元运算符描述实例isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) id(y) , 如果引用的是同一个对象则返回 True,否则返回 Falseis notis not 是判断两个标识符是不是引用自不同对象x is not y &a…...
linux 安装,卸载jdk8
1>安装1 xshell,xsftp 教育版下载 https://www.xshell.com/zh/free-for-home-school/ 2下载jdk包 https://www.oracle.com/java/technologies/downloads/3在usr下新建java文件夹把jdk包拉进去解压tar -zxvf 4首先使用vim打开etc目录下的profile文件 --> vim /etc/profile…...
标准舆情监测平台解决方案及流程,TOOM舆情监测工作计划有哪些?
舆情监测流程一般包括:数据收集、数据分析、信息汇报三个部分。首先,通过多种途径收集舆情数据,如网络媒体、社交媒体、博客、论坛等;其次,对收集的数据进行分析,统计舆情趋势、舆情类型等;最后,根据舆情分…...
Lombok使用总结
文章目录介绍Lombok原理常用注解DataGetterSetterToStringEqualsAndHashCodeNoArgsConstructorAllArgsConstructorRequiredArgsConstructorAccessors(chain true)遇到的问题谨慎使用Data问题总结Builder和Data不能共用解决介绍 官网:https://projectlombok.org/ …...
Qt 如何处理耗时的线程,不影响主线程响应 QApplication::processEvents)
事件原因: 前些时间遇到一个问题,在主线程接收子线程读的数据,一直接收不到,但放在子线程没有问题; 后面查了一下,因为接收子线程使用了 qApp->processEvents(); 查了一下 qApp->processEvents(); …...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
