从源码编译安装升级了gcc以后,程序编译运行时偶尔会遇到这样的问题:
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
运行以下命令检查:
strings /usr/lib/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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
主要原因就是你最新升级gcc后生成的动态库没有替换老版本gcc的动态库,通过
find / -name "libstdc++.so*"
得到:
/gcc-g++/gcc/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/gcc-g++/gcc/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15
/gcc-g++/gcc/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/gcc-g++/gcc-dst/lib64/libstdc++.so.6
/gcc-g++/gcc-dst/lib64/libstdc++.so.6.0.15
/gcc-g++/gcc-dst/lib64/libstdc++.so
可以找到当前系统中所有 libstdc++.so库,将最新版本(libstdc++.so.6.0.15)的库拷贝到 /usr/lib 和 /usr/lib64目录下后执行以下命令,将默认库指向改变:
rm -rf /usr/lib/libstdc++.so.6
ln -s /usr/lib/libstdc++.so.6.0.15 /usr/lib64/libstdc++.so.6
rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.15 /usr/lib64/libstdc++.so.6
确保将/usr/lib64/ 和 /usr/lib 两个目录添加到 /etc/ld.so.conf 后,执行ldconfig将库加载到系统缓存中,问题解决!