运行应用程序时出现GLIBCXX_3.4.26not found问题

运行应用程序时出现GLIBCXX_3.4.26not found问题

  • 一、业务分析
    • 1.运行环境
    • 2.业务场景
    • 3.错误分析
    • 4.解决思路
  • 二、具体操作步骤
    • 1.查询现有的支持:
    • 2.查找本机中是否存在升级
    • 3.获取GLIBCXX_3.4.26包
      • 3.1 下载GLIBCXX_3.4.26
      • 3.2 从docker复制文件到本机
    • 4.升级
  • 三、实现结果

一、业务分析

1.运行环境

运行环境: ubuntu18.04
gcc版本: 8.x.x

2.业务场景

业务场景: 在docker中建立了两个容器,一个容器作用是存放数据库,另一个容器作用为:实现数据转化操作,在这两个容器中运行应用程序没有出现问题,可以跑通程序.

此时,将所有操作和程序转移到linux下执行,出现报错信息:
/usr/lib/x86_64-linux-gun/libstdc++.so.6:version ‘GLIBCXX_3.4.26’ not found

3.错误分析

经过查找资料,初步判断问题出现原因是:安装的gcc版本生成的动态库没有替换老版本gcc的动态库,导致GLIBCXX中的版本比较低导致出现错误.

4.解决思路

将gcc最新版本的动态库替换系统中老版本的动态库即可。

二、具体操作步骤

1.查询现有的支持:

指令:strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

操作结果:

[root@ zmq]# strings libstdc++.so.6.0.26 | 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_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
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH

此时发现,最高版本是GLIBCXX_3.4.25,确实没有GLIBCXX_3.4.26,所以我们要进行升级操作.

2.查找本机中是否存在升级

操作指令:find / -name “libstdc++.so.6*”

[root@]# find / -name "libstdc++.so.6*"
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/opt/rh/devtoolset-7/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.py
/opt/rh/devtoolset-7/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyc
/opt/rh/devtoolset-7/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyo
/opt/rh/devtoolset-7/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/opt/rh/devtoolset-7/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/opt/rh/devtoolset-7/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.py
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyc
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyo
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/opt/rh/devtoolset-9/root/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo

发现这里面也没有我们需要的GLIBCXX_3.4.26,那就要考虑下载了

但是如果这里面有你需要的包,那就可以直接升级,再查询升级,就好啦

3.获取GLIBCXX_3.4.26包

3.1 下载GLIBCXX_3.4.26

GLIBCXX_3.4.26包下载地址:http://www.vuln.cn/9154

3.2 从docker复制文件到本机

由于我在docker中可以运行,所以我就去docker里面strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX看了下,发现有GLIBCXX_3.4.26,我就直接复制到本机下了

指令:docker cp 容器名:文件路径 /要复制到本机的目录

4.升级

步骤一:将下载的包放到 /usr/lib64 下
cp libstdc++.so.6.0.26 /usr/lib64/

步骤二: 到 /usr/lib64 目录下
cd /usr/lib64/

步骤三:删除现在的libstdc++.so.6
rm -rf libstdc++.so.6

步骤四:重新建立链接
ln -s libstdc++.so.6.0.26 libstdc++.so.6

三、实现结果

查询升级后是否有GLIBCXX_3.4.26:strings libstdc++.so.6 | grep GLIBCXX

结果可以查到GLIBCXX_3.4.26,同时程序也可以跑起来了

以上就是运行应用程序时出现GLIBCXX_3.4.26not found问题的相关解决办法.

你可能感兴趣的:(运行应用程序时出现GLIBCXX_3.4.26not found问题)