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