在执行程序时,提示: ./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,
一个名叫“讨火车”的小村子 终于把火车讨来了c++内存 指针越界检测机制_CrtMemBlockHeade错误总结-myBatis plus 分页记一次EventBus内存泄露导致的项目问题服务器价格有什么差异?Android中获取当前正在显示的Activity实例创建数据mysql库流程在Vue中使用Web Worker最优化方法总结:公式解、数值优化、求解思想使用easyPOI导入Excel数据