当前位置: 首页 > article >正文

Ubuntu 22.04 升级 GCC 13.1.0 踩坑记:从编译到解决 GLIBCXX_3.4.31 报错的完整流程

Ubuntu 22.04 升级 GCC 13.1.0 实战从编译到解决 GLIBCXX_3.4.31 报错的完整指南当你在终端里看到gcc -v显示13.1.0版本时那种成就感是真实的。但下一秒当你编译的C程序运行时突然崩溃报错提示缺少GLIBCXX_3.4.31时那种从云端跌落的挫败感同样真实。这不是普通的安装教程而是一个开发者真实的排雷记录。1. 为什么需要手动升级GCCUbuntu 22.04默认搭载的是GCC 11.2.0版本虽然稳定但对于需要C20/23新特性的开发者来说远远不够。官方仓库通常不会立即提供最新版本的编译器这就是为什么我们需要手动编译安装。手动编译GCC的几个关键原因需要支持最新的C标准如协程、概念等特定项目对编译器版本有硬性要求性能优化或bug修复只在最新版本中提供注意手动编译安装意味着你需要自行处理所有依赖关系和后续维护这与apt安装的版本有本质区别。2. 编译安装GCC 13.1.0的完整流程2.1 准备工作与环境检查首先确认你的系统状态# 检查当前GCC版本 gcc --version # 检查系统架构 uname -m # 检查磁盘空间编译需要至少15GB空闲空间 df -h安装必要的构建工具sudo apt update sudo apt install build-essential \ g \ make \ m4 \ wget \ texinfo \ zlib1g-dev2.2 下载与解压源码从GNU官方镜像获取最新稳定版wget http://ftp.gnu.org/gnu/gcc/gcc-13.1.0/gcc-13.1.0.tar.gz tar xf gcc-13.1.0.tar.gz cd gcc-13.1.02.3 解决依赖问题GCC编译需要几个关键依赖库./contrib/download_prerequisites如果遇到网络问题导致下载失败可以手动下载这些文件gmp-6.2.1.tar.bz2mpfr-4.1.0.tar.bz2mpc-1.2.1.tar.gzisl-0.24.tar.bz2将它们放在gcc-13.1.0目录下然后运行for f in *.tar.*; do tar xf $f; done ln -s gmp-6.2.1 gmp ln -s mpfr-4.1.0 mpfr ln -s mpc-1.2.1 mpc ln -s isl-0.24 isl2.4 配置与编译创建独立的构建目录mkdir build cd build配置编译选项关键参数说明../configure \ --prefix/usr/local/gcc-13.1.0 \ --enable-languagesc,c \ --disable-multilib \ --enable-checkingrelease \ --program-suffix-13参数解析--prefix指定安装路径避免污染系统目录--program-suffix为gcc/g添加版本后缀方便多版本共存开始编译根据CPU核心数调整-j参数make -j$(nproc)2.5 安装与验证编译完成后进行安装sudo make install更新系统链接谨慎操作sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-13.1.0/bin/gcc-13 100 sudo update-alternatives --install /usr/bin/g g /usr/local/gcc-13.1.0/bin/g-13 100验证安装gcc-13 --version3. 运行时库问题的诊断与修复3.1 问题现象分析编译成功但运行时崩溃的典型报错./a.out: /usr/lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.31 not found为什么会出现这个问题新GCC编译时链接的是自带的libstdc.so.6.0.31但系统运行时仍使用旧版的libstdc.so.6.0.30版本不匹配导致符号查找失败3.2 诊断工具的使用使用strings检查库文件支持的版本strings /usr/lib/x86_64-linux-gnu/libstdc.so.6 | grep GLIBCXX使用locate查找所有相关库文件sudo updatedb locate libstdc.so.6检查软链接关系ls -l /usr/lib/x86_64-linux-gnu/libstdc.so.63.3 解决方案对比方法优点缺点适用场景更新软链接快速直接可能影响系统稳定性开发环境设置LD_LIBRARY_PATH不影响系统库需要每次设置临时测试完整替换系统库一劳永逸风险高生产环境不推荐推荐方案更新软链接找到新编译的库文件find /usr/local -name libstdc.so.6.0.31复制到系统库目录sudo cp /usr/local/gcc-13.1.0/lib64/libstdc.so.6.0.31 /usr/lib/x86_64-linux-gnu/重建软链接cd /usr/lib/x86_64-linux-gnu sudo rm libstdc.so.6 sudo ln -s libstdc.so.6.0.31 libstdc.so.6验证修复strings /usr/lib/x86_64-linux-gnu/libstdc.so.6 | grep GLIBCXX_3.4.314. 多版本GCC共存管理4.1 使用update-alternatives管理查看当前配置update-alternatives --config gcc update-alternatives --config g切换版本sudo update-alternatives --config gcc # 交互式选择版本号4.2 环境变量控制法在~/.bashrc中添加export PATH/usr/local/gcc-13.1.0/bin:$PATH export LD_LIBRARY_PATH/usr/local/gcc-13.1.0/lib64:$LD_LIBRARY_PATH然后生效配置source ~/.bashrc4.3 编译时指定路径显式指定库路径g-13 -Wl,-rpath/usr/local/gcc-13.1.0/lib64 your_program.cpp5. 进阶问题排查技巧5.1 检查二进制文件依赖使用ldd查看动态库依赖ldd ./a.out5.2 调试符号加载通过gdb查看运行时库加载gdb ./a.out (gdb) set environment LD_DEBUGlibs (gdb) run5.3 版本冲突预防编译时静态链接部分库g-13 -static-libstdc your_program.cpp代价会显著增加二进制文件大小6. 系统集成与后续维护6.1 添加库搜索路径编辑配置文件sudo bash -c echo /usr/local/gcc-13.1.0/lib64 /etc/ld.so.conf.d/gcc-13.conf sudo ldconfig6.2 定期清理旧版本检查磁盘占用du -sh /usr/local/gcc-*安全删除sudo rm -rf /usr/local/gcc-12.2.06.3 升级时的注意事项备份当前工作环境记录所有自定义配置在虚拟机中测试新版本逐步替换避免全量更新在经历了两天的反复尝试后我发现最可靠的解决方案不是盲目跟随网络教程而是真正理解Linux库管理机制。那些看似简单的软链接背后是动态链接器复杂的版本控制逻辑。现在当我的C20代码在GCC 13上流畅运行时那些踩过的坑都变成了宝贵的系统级调试经验。

相关文章:

Ubuntu 22.04 升级 GCC 13.1.0 踩坑记:从编译到解决 GLIBCXX_3.4.31 报错的完整流程

Ubuntu 22.04 升级 GCC 13.1.0 实战:从编译到解决 GLIBCXX_3.4.31 报错的完整指南 当你在终端里看到gcc -v显示13.1.0版本时,那种成就感是真实的。但下一秒,当你编译的C程序运行时突然崩溃,报错提示缺少GLIBCXX_3.4.31时&#xff…...

保姆级教程:用开源工具KiCad设计你的第一个BGA封装(附焊盘、过孔避坑指南)

从零开始掌握BGA封装设计:KiCad实战指南与高频问题解决方案 在硬件设计领域,BGA封装因其高密度引脚和优异电气性能已成为高端芯片的首选。但许多工程师第一次面对256球0.8mm间距的BGA时,往往会被密密麻麻的焊球阵列吓退。本文将以KiCad 7.0为…...

Sunshine游戏串流终极指南:如何打造跨平台低延迟游戏体验

Sunshine游戏串流终极指南:如何打造跨平台低延迟游戏体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器,专为M…...

别再死记硬背DMA了!用STM32F4的ADC+DMA实战,5分钟搞懂数据搬运

从零玩转STM32F4的ADCDMA:手把手教你实现高效数据搬运 第一次接触STM32的DMA功能时,我也曾被那些晦涩难懂的专业术语搞得晕头转向。直到在项目中真正用DMA解决了ADC采样卡顿的问题,才恍然大悟——原来DMA的精髓不在于死记硬背概念&#xff0c…...

抖音批量下载神器:免费无水印视频一键获取完整方案

抖音批量下载神器:免费无水印视频一键获取完整方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...

Real-Anime-Z行业落地:国产动漫工业化流程中风格锚定与质量可控实践

Real-Anime-Z行业落地:国产动漫工业化流程中风格锚定与质量可控实践 1. 项目概述 Real-Anime-Z是一款基于Stable Diffusion技术开发的写实向动漫风格大模型,由国内团队Devilworld训练发布。该模型创新性地实现了介于写实与纯动漫之间的2.5D风格表现&am…...

中文在线年营收16.6亿:净亏6.7亿 腾讯与阅文减持 合计套现4亿

雷递网 雷建平 4月23日中文在线集团股份有限公司(证券代码:300364,证券简称:中文在线)日前发布截至2025年的财报。财报显示,中文在线2025年营收为16.57亿,较上年同期的11.59亿元增长43%。中文在…...

Neofetch配置文件深度解析:从英文到全中文,再到只显示你关心的系统指标

Neofetch配置文件深度解析:从英文到全中文,再到只显示你关心的系统指标 在终端里敲下neofetch命令后,系统信息以ASCII艺术形式优雅呈现的场景,已经成为技术爱好者们的某种仪式感。但当你第20次看到相同的显卡型号和内存占用率时&a…...

Claude Code Routines 深度解析:重新定义 AI 辅助编程的工作流自动化

Claude Code Routines 深度解析:重新定义 AI 辅助编程的工作流自动化 在 AI 辅助编程工具井喷的今天,我们正处于一个微妙的转折点。开发者们已经不再满足于简单的"问答式"编程辅助,也不愿仅仅将 AI 作为一个稍微智能一点的代码补全…...

从‘true’到true:写给Vue/React新手的API数据‘清洗’避坑指南(附fetch/axios示例)

从‘true’到true:写给Vue/React新手的API数据‘清洗’避坑指南 刚接触Vue或React的前端开发者,在对接后端API时经常会遇到这样的场景:明明请求成功了,页面却显示异常,控制台抛出Uncaught SyntaxError或[object Object…...

Python os.path模块:isfile()与isdir()的隐藏逻辑与实战避坑指南

1. 为什么你的路径判断总出错?揭秘isfile()与isdir()的隐藏逻辑 刚接触Python文件操作时,我也被这两个函数坑过好几次。记得有次写自动化脚本,明明逻辑没问题,但就是判断不准路径类型。后来才发现,问题出在对os.path.i…...

AssetRipper:揭秘Unity资产提取工具背后的智能数据管理系统 [特殊字符]

AssetRipper:揭秘Unity资产提取工具背后的智能数据管理系统 🚀 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper …...

顶会论文模块复现与二次创新:前沿损失函数探索:Focaler-IoU 复现与对比实验,针对困难样本回归的极致优化

一、写在前面:边界框回归的“公平性困境” 做目标检测的朋友一定有过这样的体验:模型在验证集上mAP还不错,但一到实际场景中,小目标漏检严重、遮挡目标定位漂移、密集场景下的框回归“拖泥带水”。排查了很久的网络结构、数据增强、训练策略,最后发现问题竟然出在最不起眼…...

遥感测绘领域投稿避坑指南:从《测绘学报》到《遥感信息》,如何根据你的研究方向精准选刊

遥感测绘领域投稿策略:从期刊匹配到高效发表的实战指南 站在实验室窗前,看着屏幕上闪烁的遥感影像处理结果,你或许正面临一个关键抉择——如何将数月甚至数年的研究成果转化为一篇能够发表在合适期刊上的论文。对于遥感测绘领域的研究生和青年…...

科研翻译效率提升300%:Zotero PDF Translate全面使用指南

科研翻译效率提升300%:Zotero PDF Translate全面使用指南 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh_mirro…...

别再死记硬背了!用这20个FME转换器搞定90%的数据处理(附实战场景)

20个FME转换器实战指南:从数据清洗到空间分析的完整工作流 第一次接触FME时,面对上百个转换器图标,我完全不知所措。直到参与了一个城市管网项目,才真正理解如何组合这些工具解决实际问题。本文不会简单罗列功能,而是通…...

思源宋体CN终极指南:从开源字体到设计利器的完整蜕变

思源宋体CN终极指南:从开源字体到设计利器的完整蜕变 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是否曾为寻找一款既专业又免费的中文字体而烦恼?在数字设…...

Windows屏幕标注神器ppInk:技术架构深度解析与实战应用指南

Windows屏幕标注神器ppInk:技术架构深度解析与实战应用指南 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否曾在线上会议中手忙脚乱地寻找标注工具?是否因为复杂的标注软件而放弃了屏幕演示的精…...

在 ABAP Cloud 里为什么 sy-datum 会报警,以及该如何把它改成真正合规的写法

我先把结论放在前面,The old variant of "SY-DATUM" should not be used in the current ABAP language version 这个 warning,不是在说代码立刻不能跑,也不是在说系统不认识日期了。 它真正想表达的是,当前这个类的 ABAP Language Version 已经是 ABAP for Clou…...

Transformer位置编码插值与YaRN技术解析

1. 位置编码插值与YaRN扩展技术解析在自然语言处理领域,Transformer架构已成为处理序列数据的标准方案。其核心组件之一的位置编码系统,决定了模型对序列顺序的理解能力。传统固定长度位置编码在面对超长文本时面临两大挑战:训练阶段未见过的…...

S32K148开发效率翻倍秘籍:活用S32KDS的Pin Mux、代码生成与Gitee开源例程

S32K148开发效率翻倍秘籍:活用S32KDS的Pin Mux、代码生成与Gitee开源例程 对于已经掌握S32K148基础开发的工程师来说,如何从"能跑通Demo"进阶到"高效完成项目"是一个关键跃迁。本文将聚焦三个核心效率工具链——Pin Mux可视化配置、…...

单细胞分析避坑指南:为什么你的scanpy数据归一化后结果还是不对?

单细胞分析避坑指南:为什么你的scanpy数据归一化后结果还是不对? 单细胞RNA测序技术正在重塑我们对生物系统的理解,但数据预处理环节的微小偏差可能导致整个分析链条的崩溃。许多研究者在使用scanpy进行归一化(sc.pp.normalize_to…...

从部署到解释:如何用Alibi + Seldon Core给你的AI服务加上‘可解释性’API

构建可解释AI微服务:Alibi与Seldon Core的工程化实践 当机器学习模型从实验室走向生产环境时,"黑箱效应"往往成为阻碍业务落地的最后一公里。金融风控系统拒绝贷款申请时需说明具体原因,医疗影像诊断AI必须标注关键病灶区域&#x…...

Cocos进阶:Spine骨骼动画动态加载与挂点脚本化实战

1. Spine骨骼动画动态加载实战 第一次在Cocos Creator里用Spine动画时,我习惯直接把资源拖到编辑器里。直到项目需要实现"角色换装"功能,才发现动态加载才是王道。想象一下:玩家在商城里买了新皮肤,总不能每次都重新打包…...

结合模体发现(Motif Discovery)与残差分析的时间序列研究方法

这篇关于多变量时间序列残差分析的学术论文。 论文基本信息项目内容标题Cutting through the noise: Explaining residuals in multivariate time series with motif analysis(穿透噪音:用模体分析解释多变量时间序列中的残差)作者Miguel G. …...

学习网安-二刷之SSRF

SSRF(服务器端请求伪造)概述SSRF是一种攻击者通过服务器发起恶意请求的安全漏洞,通常用于访问内部系统或绕过防火墙限制。攻击者利用目标服务器作为代理,请求内网资源或第三方服务。SSRF常见利用场景访问内部服务:扫描…...

Mac用户别折腾了!实测三种方法给U盘装Win10,最后还得靠Windows

Mac用户制作Windows启动盘的终极避坑指南 作为一个长期使用Mac却不得不偶尔与Windows打交道的用户,我最近经历了一场制作Windows 10启动U盘的噩梦。原本以为在Mac上完成这个任务会很简单,结果却接连尝试了三种方法都以失败告终。这篇文章将详细记录我的…...

NVIDIA IGX平台:企业级AI边缘计算解决方案解析

1. NVIDIA IGX平台的企业级AI边缘计算解决方案在医疗影像实时分析、工业质检流水线和天文观测数据处理这些场景中,传统云计算架构面临的根本矛盾在于:数据产生端与计算端的物理距离导致的网络延迟,与业务对毫秒级响应的硬性要求之间不可调和的…...

避坑指南:STM32软件I2C读取MPU6050数据老是不对?可能是这5个细节没做好

STM32软件I2C读取MPU6050数据异常排查实战手册 深夜调试嵌入式系统时,最令人抓狂的莫过于硬件连接看似正常,但传感器数据死活读不出来。上周我就遇到了这样的困境:用STM32的软件模拟I2C读取MPU6050时,OLED屏幕上要么显示一堆乱码&…...

告别手动!用ABAP BADI给采购订单行项目自动填税码(附Z001/Z002订单类型代码)

告别手动!用ABAP BADI给采购订单行项目自动填税码(附Z001/Z002订单类型代码) 在SAP采购订单处理中,税码的频繁手工输入一直是业务部门的痛点。想象一下,每天处理数百个采购订单,每个订单包含数十个行项目&a…...