运行应用程序时出现GLIBCXX_3.4.26not found问题
一、业务分析
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问题的相关解决办法.
|