安装 GCC 之前,首先我们需要下载,下载命令如下:
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
下载完之后,我们使用如下命令进行解压:
tar -jxvf gcc-6.1.0.tar.bz2
接着,我们开始下载依赖项:
cd gcc-6.1.0 ./contrib/download_prerequisites
我们再次建立一个目录供编译出的文件存放:
mkdir gcc-build-6.1.0 cd gcc-build-6.1.0
我们使用如下命令生成 Makefile 文件:
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
现在,我们开始编译安装,执行如下命令:
make -j4 && make install
现在,我们重启,然后查看 gcc 版本,具体命令如下:
gcc -v
升级 gcc,生成的动态库没有替换老版本 gcc 的动态库,源码编译升级安装了 gcc 后,编译程序或运行其它程序时,有时会出现类似
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
的问题。这是因为升级 gcc 时,生成的动态库没有替换老版本 gcc 的动态库导致的,将 gcc 最新版本的动态库替换系统中老版本的动态库即可解决。
运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
从输出可以看出,gcc 的动态库还是旧版本的。说明出现这些问题,是因为升级 gcc 时,生成的动态库没有替换老版本 gcc 的动态库。
执行以下命令,查找编译 gcc 时生成的最新动态库:
find / -name "libstdc++.so*"
将上面的最新动态库 libstdc++.so.6.0.22 复制到 /usr/lib64 目录下:
cd /usr/lib64 cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./
删除原来软连接:
rm -rf libstdc++.so.6
将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.22 libstdc++.so.6
最后,默认动态库升级完成。重新运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
可以看到,输出有 “GLIBCXX_3.4.21” 了。