解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的问题方法总结

在执行程序时,提示: ./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++选项



你可能感兴趣的:(C++)