升级GCC后运行程序出现错误:
1 |
/usr/lib64/libstdc++.so.6: version "CXXABI_1.3.9" not found |
问题的原因是因为升级GCC后相应的动态库没有更新,程序找不到新版本GCC库中的符号,运行不成功。使用ls
命令查看该文件可以看到动态库是一个软链接:
1 2 |
> ls -l /usr/lib64/libstdc++.so.6 lrwxrwxrwx 1 root root 19 Aug 24 12:28 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13 |
strings
1 2 3 4 5 6 |
> strings /usr/lib/libstdc++.so.6.0.13 | grep CXXABI CXXABI_1.3 CXXABI_1.3.1 CXXABI_1.3.2 CXXABI_1.3.3 CXXABI_1.3.4 |
因此需要手动更新动态库,动态库位于gcc编译目录下,可以在遍历目录下查找:
1 2 3 4 5 6 7 8 |
> cd **/gcc-7.2.0/build/ # build是编译时创建的目录 > find . -name "libstdc++.so.*" ./prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 ./prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 ./stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 ./stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 ./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 ./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 |
prev
开头的应该是预览版本,stage1
1 2 3 |
> /bin/cp -f x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6* /usr/lib > rm -f /usr/lib64/libstdc++.so.6 # 移出旧链接 > ln -s /usr/lib/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6 # 创建新链接 |
查看动态库版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
> strings /usr/lib/libstdc++.so.6 | grep CXXABI CXXABI_1.3 CXXABI_1.3.1 CXXABI_1.3.2 CXXABI_1.3.3 CXXABI_1.3.4 CXXABI_1.3.5 CXXABI_1.3.6 CXXABI_1.3.7 CXXABI_1.3.8 CXXABI_1.3.9 CXXABI_1.3.10 CXXABI_1.3.11 CXXABI_TM_1 CXXABI_FLOAT128 |
然后运行程序就不会报错了。
评论