解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.x.x‘ not found问题

目录

    • 1、查找缺少库版本
    • 2、动态库版本与gcc版本对应关系
    • 3、查找 libstdc++.so.6.0.x 库文件
    • 4、如果libstdc++.so.6.0.21库文件已存在,则按照下面的步骤创建软链接即可
      • 4.1 拷贝、软连接
      • 4.2验证新的 libstdc++.so.6.0.21 库文件是否生效
    • 5、如果libstdc++.so.6.0.21库文件不存在,则需要按照下面的步骤编译新版本的GCC,然后再创建软链接
      • 5.1 下载GCC
      • 5.2 建立软连接
      • 5.3 验证

遇到这个问题的时候是在连接库的时候出现的问题,而且不是在编译的时候出现的,实在运行的时候才 报错,出现这种问题就是因为编译库的编译器和编译当前程序的编译器版本是不一样的,在具体一点就是因为,当前程序的编译器的版本是比较低或较高,只要调整一下就可以了。

1、查找缺少库版本

可以用如下命令查看一下当前GCC版本:

strings /usr/lib/libstdc++.so.6 | grep GLIBCXX

在我的机器上运行结果这样的:


GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW

如果有动态库中要求的GCC版本 ,例如“GLIBCXX_3.4.14”,就要从已经有该库的位置拷贝到/usr/lib//usr/lib64.

2、动态库版本与gcc版本对应关系

GCC 各版本中 gcc-5.2.0 对应 GLIBCXX_3.4.21 与 libstdc++.so.6.0.21,而 gcc-6.5.0 对应 GLIBCXX_3.4.22 与 libstdc++.so.6.0.22,具体下载的 GCC 版本根据自己的需要进行选择。
对应关系地址:
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

对应版本的截图
在这里插入图片描述

3、查找 libstdc++.so.6.0.x 库文件

# 这里以一个为例
# 查找库文件
$ find / -name libstdc++.so.6.0.21
$ /lib/libstdc++.so.6.0.21

4、如果libstdc++.so.6.0.21库文件已存在,则按照下面的步骤创建软链接即可

4.1 拷贝、软连接

$ cp /lib/libstdc++.so.6.0.21 /usr/lib
$ cp /lib/libstdc++.so.6.0.21 /usr/lib64
# 删除旧的链接文件
$ rm -f libstdc++.so.6
 
#分别进入/usr/lib和/usr/lib64目录 创建新的链接文件
$ ln -s libstdc++.so.6.0.21 libstdc++.so.6

# 查看最终的libstdc++.so库文件列表
$ ls -al /usr/lib64/libstdc++.so.6*
lrwxrwxrwx. 1 root root       19 312 10:08 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x. 1 root root   991616 1030 14:39 /usr/lib64/libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 11485880 312 10:01 /usr/lib64/libstdc++.so.6.0.21

4.2验证新的 libstdc++.so.6.0.21 库文件是否生效

如果下面的输出结果中,出现 GLIBCXX_3.4.21,则代表新的 libstdc++.so.6.0.21 库文件生效。

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

5、如果libstdc++.so.6.0.21库文件不存在,则需要按照下面的步骤编译新版本的GCC,然后再创建软链接

5.1 下载GCC

GCC 各版本的下载地址
https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/

# 下载文件(117M)
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2
 
# 解压文件
$ tar -xvf gcc-5.2.0.tar.bz2
 
# 进入解压目录
$ cd gcc-5.2.0
 
# 下载编译gcc所需的依赖文件和库
$ ./contrib/download_prerequisites
 #********************************
 #如果./contrib/download_prerequisites执行报错,按下执行
 #wget http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
#wget http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
#wget http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
#wget http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2
 #**********************************

# 建立输出目录,用于存放编译时所有产生的中间文件
$ mkdir gcc-temp
 
# 进入输出目录
$ cd gcc-temp
 
# 执行configure配置
$ ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
 
# 编译gcc,指定编译使用的线程数为8,编译耗时较长,可能需要几个小时
$ make -j8
 
# 这里为了避免影响系统的稳定性,暂时不执行"make install"和替换系统默认版本的gcc

5.2 建立软连接

# 进入输出目录
$ cd gcc-temp
 
# 查找编译生成libstdc++.so库文件,下面查找到的libstdc++.so、libstdc++.so.6都只是软链接文件,libstdc++.so.6.0.21才是真正编译生成的库文件
$ find . -name "libstdc++.so*"
./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
 
# 拷贝libstdc++.so.6.0.21库文件到lib64目录
$ cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
 
# 进入lib64目录
$ cd /usr/lib64
 
# 删除旧的链接文件
$ rm -f libstdc++.so.6
 
# 创建新的链接文件
$ ln -s libstdc++.so.6.0.21 libstdc++.so.6
 
# 查看最终的libstdc++.so库文件列表
$ ls -al /usr/lib64/libstdc++.so.6*
lrwxrwxrwx. 1 root root       19 312 10:08 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x. 1 root root   991616 1030 14:39 /usr/lib64/libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 11485880 312 10:01 /usr/lib64/libstdc++.so.6.0.21

5.3 验证

见4.2

##【参考】
1、gcc full list of versions :https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
2、报错信息ImportError: /lib64/libstdc++.so.6: version CXXABI_1.3.9' not found (required by............) https://www.cnblogs.com/jimlau/p/13263052.html 3、 解决/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.14’ not found问题
https://blog.csdn.net/xiaolong2w/article/details/23915171
4、Fix the error: CXXABI 1.3.9 not found on CentOS 7 running DirectAdmin
https://azdigi.com/blog/en/webserver-panel-en/directadmin-en/fix-the-error-cxxabi-1-3-9-not-found-on-centos-7-running-directadmin/
5、Linux解决libstdc++的版本问题
https://blog.csdn.net/u013934914/article/details/104926415
6、libstdc++.so.6: version GLIBCXX_3.4.X 没有找到的解决办法
https://zhuanlan.zhihu.com/p/142718039
7、full version 对应关系:https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
8、Atlas 900 PoD (Model 9000) 22.0.0 Cluster Delivery Guide
https://support.huawei.com/enterprise/en/doc/EDOC1100289998/326e1dc5/installing-gcc-730

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 909 (Div. 3)(A~G)(启发式合并 , DSU ON TREE)

1899A - Game with Integers 题意:给定一个数 , 两个人玩游戏,每人能够执行 操作,若操作完是3的倍数则获胜,问先手的人能否获胜(若无限循环则先手的人输)。 思路:假如一个数模3余1或者2&#…

计算机msvcr120.dll丢失的解决方法,分享多种亲测可靠的方法

在使用计算机的过程中,我们有时可能会遇到一些技术问题,其中之一就是提示丢失msvcr120.dll文件。当计算机提示丢失msvcr120.dll文件时,可能是由于某些程序无法找到这个文件,从而导致程序无法正常运行。那么我们需要如何解决修复好…

微服务下整合knife4j接口文档

前言:本文旨在解决微服务下通过网关访问所用服务的knife4j文档,无需再通过其他服务单独访问 功能模块配置: 1.配置类: 在这个文件中注意下basePackage的扫描路径,修改为对应controller下的路径。 Configuration EnableSwagger…

教你轻松解决win系统ucrtbased.dll丢失的问题,亲测有效!

ucrtbased.dll是一个动态链接库文件(DLL),它是Windows操作系统中的一部分,主要负责提供操作系统和应用程序所需的函数和接口。这个文件包含了操作系统和应用程序共同使用的通用代码,以确保不同程序之间的兼容性和稳定性…

人工智能发展前景

随着人工智能的快速发展,这个行业对人才的需求也在不断增长。越来越多的有志之士开始关注人工智能,希望通过自学获得相关技能,进而在人工智能领域找到心仪的职业。本文将探讨人工智能职业发展的前景,并为大家提供自学人工智能的途…

cesium雷达扫描(雷达扫描线)

cesium雷达扫描(雷达扫描线) 下面富有源码 实现思路 使用ellipse方法加载圆型,修改ellipse中‘material’方法重写glsl来实现当前效果 示例代码 index.html <!DOCTYPE html> <html lang="en"><head>

Golang环境搭建Win10(简洁版)

Golang环境搭建Win10 Golang环境搭建(Win10)一、前言二、Golang下载三、配置环境变量3.1、配置GOROOT3.2、配置GOPATH3.3、配置GOPROXY代理 Golang环境搭建(Win10) 一、前言 Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken…

亚马逊云Amazon OpenSearch Serverless“利刃在手,‘向量’八方“

全Serverless架构新价值 随着Amazon OpenSearch Serverless正式上线“商用”&#xff0c;亚马逊云科技的全栈“Serverless”应用架构也“初见雏形”&#xff0c;这也意味着&#xff0c;未来企业可以在亚马逊云科技之上简单和轻松的搭建完整的无服务器应用架构。 数据也显示&am…

十二、Docker的简介

目录 一、介绍 Docker 主要由以下三个部分组成&#xff1a; Docker 有许多优点&#xff0c;包括&#xff1a; 二、Docker和虚拟机的差异 三、镜像和容器 四、Docker Hub 五、Docker架构 六、总结 一、介绍 Docker 是一种开源的应用容器平台&#xff0c;可以在容器内部…

一键云端,AList 整合多网盘,轻松管理文件多元共享

hello&#xff0c;我是小索奇&#xff0c;本篇教大家如何使用AList实现网盘挂载 可能还是有小伙伴不懂&#xff0c;所以简单介绍一下哈 AList 是一款强大的文件管理工具&#xff0c;为用户提供了将多种云存储服务和文件共享协议集成在一个平台上的便利性。它的独特之处在于&am…

2023-2024华为ICT大赛-计算赛道-广东省省赛初赛-高职组-部分赛题分析【2023.11.18】

2023-2024华为ICT大赛 计算赛道 广东省 省赛 初赛 高职组 部分赛题 分析【2023.11.18】 文章目录 单选题tpcds模式中存在表customer&#xff0c;不能成功删除tpcds模式是&#xff08; &#xff09;以下哪个函数将圆转换成矩形&#xff08; &#xff09;下列哪个选项表示依赖该D…

jvm 内存模型概述

一、类加载子系统 1、类加载的过程&#xff1a;装载、链接、初始化&#xff0c;其中&#xff0c;链接又分为验证、准备和解析 装载&#xff1a;加载class文件 验证&#xff1a;确保字节流中包含信息符合当前虚拟机要求 准备&#xff1a;分配内存&#xff0c;设置初始值 解析&a…

计算机算法分析与设计(23)---二分搜索算法(C++)

文章目录 1. 算法介绍2. 代码编写 1. 算法介绍 1. 二分搜索&#xff08;英语&#xff1a;binary search&#xff09;&#xff0c;也称折半搜索&#xff08;英语&#xff1a;half-interval search&#xff09;、对数搜索&#xff08;英语&#xff1a;logarithmic search&#xf…

十. Linux关机重启命令与Vim编辑的使用

关机重启命令 shutdown命令 其他关机命令 其他重启命令 系统运行级别 系统默认运行级别与查询 退出登录命令logout 文本编辑器Vim Vim简介 没有菜单,只有命令Vim工作模式 Vim常用命令 插入命令 定位命令 删除命令 复制和剪切命令 替换和取消命令 搜索和搜索替换命令 保存和退出…

Clickhouse初认识

技术主题-clickhouse 一什么是clickHouse 1&#xff09;本质上就是一款数据库管理系统&#xff0c;能提供海量数据的存储和检索 2&#xff09;基于列存储&#xff0c;数据是按照列进行存储的&#xff08;数据格式一样&#xff0c;方便进行压缩&#xff09; 3&#xff09;具备…

【Rust】快速教程——闭包与生命周期

前言 你怎么向天生的瞎子说清颜色&#xff1f;怎么用手势向天生的聋子描述声音&#xff1f; 鲜花就在眼前&#xff0c;雷鸣就在头顶&#xff0c;对他们来说却都毫无意义 眼睛看不到&#xff0c;鼻子可以嗅闻花香&#xff0c;耳朵听不见&#xff0c;手指可以触碰窗纸的震动。 犯…

【C语言】数组下标为啥从0开始?下标越界访问一定报错吗?

本篇文章目录 0. 相关文章1. 下标从0开始问题2. 数组下标越界不报错问题 0. 相关文章 指针与指针变量数组名不是首元素地址的的2个例外拨开指针和数组名之间的迷雾 1. 下标从0开始问题 原因是&#xff1a;数组下标访问本质是“指针解引用操作”&#xff0c;而指针又是地址&am…

C++之map容器

C之map容器 map构造和赋值 #include<iostream> #include<string> using namespace std; #include<map>void printMap(map<int,int>&m) {for (map<int,int>::iterator it m.begin();it ! m.end();it){//cout <<"key is: "&l…

LeetCode994.腐烂的橘子

看完题我觉得这不是和上一道岛屿的题一样简单嘛&#xff0c;然后写了将近2个小时才写出来&#xff0c;我的思路就是&#xff0c;用check()先对grid检查一下&#xff0c;是否有以下情况&#xff1a; &#xff08;如果有1的周围都是空&#xff0c;则这个位置用不腐烂&#xff0c;…

[Docker]六.Docker自动部署nodejs以及golang项目

一.自动部署nodejs 1.创建node项目相关文件 app.js代码如下: var express require(express);var appexpress();app.get(/,function(req,res){res.send(首页update); }) app.get(/news,function(req,res){res.send(首页); })//docker做端口映射的时候不要指定ip app.listen(30…