解决/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found问题
问题分析
调用的高版本的gcc,生成的动态库没有替换老版本
gcc
的动态库导致的,找到新版的gcc库指定。查看libstdc++.so.6支持版本
$ strings /usr/lib/x86_64-linux-gnu/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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.18
GLIBC_2.3.4
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
- 可以看到
gcc
的动态库没有3.4.21版本的 - 出现这些问题,使用高版本gcc
时,系统没有找到新生成
gcc`的动态库。
修复问题
- 网上的解决版本,将最新动态库
libstdc++.so.6.0.21
复制到`/usr/lib目录下。 - 由于没有root权限,不能修改系统下的文件。
- 可以指定环境变量的库来解决问题
- 首先找到新的ibstdc++.so。
$ locate libstdc++.so
/lib/libstdc++.so
/lib/libstdc++.so.6
/lib/libstdc++.so.6.0.21
$ strings /lib/libstdc++.so.6.0.21 | grep GLIBC
GLIBCXX_DEBUG_MESSAGE_LENGTH
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.3.2
这里可以看到GLIBCXX_3.4.21。
指定一下新的gcc库来解决。
export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH