在执行程序时,提示: ./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not
found (required by ./a.out)

我是在编译GCC源码升级GCC版本后出现的该问题, 这是由于GCC升级后标准库还是旧的导致的,解决方法如下:

方法一:

    在编译GCC的目录中,查找libstdc++ 相关的库,并复制到/usr/lib目录下,并重新建立软连接就可以。

1. 切换到root用户 su -

2. 进入编译GCC的目录,  我是在/opt下编译的, cd /opt/build-gcc

3. 查找libstdc库    find ./ -name libstdc++.so*    

[root@localhost build-gcc]# find ./ -name libstdc++.so*  
./stage1-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./stage1-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./stage1-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./prev-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./prev-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./prev-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
[root@localhost build-gcc]# 

4.  cp ./i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
 /usr/lib   64位系统可能在/usr/lib64下

5. cd  /usr/lib

6. ls -l |grep libstdc++      可以看到如下

lrwxrwxrwx   1 root root       19 Mar  2 19:07 libstdc++.so.6 ->
libstdc++.so.6.0.8
-rwxr-xr-x   1 root root  9254976 Mar  2 19:05 libstdc++.so.6.0.21
-rwxr-xr-x   1 root root   936908 Jul 10  2007 libstdc++.so.6.0.8

7. rm -f libstdc++.so.6 8. ln -s libstdc++.so.6.0.21 libstdc++.so.6.0.8
一切应该都恢复正常了

方法二: 在编译时使用静态链接标准库的方法, 编译时添加  -static-libstdc++选项

技术
©2019-2020 Toolsou All rights reserved,
Java开发2020年最新常见面试题整理【Spring源码分析】42-@Conditional详解element-ui踩坑记录神仙面试宝典你有了吗?半月看完25大专题,居然斩获阿里P8offer使用css样式设计一个简单的html登陆界面XCTF攻防世界web新手练习_ 9_command_executionJS中的解构赋值的详解与具体用途Python Web 框架elementui 穿梭框 el-transfer 展示列表内容文字过长ConcurrentHashMap实现原理及源码解析