https://www.gnu.org/prep/ftp.html
先找一个亚洲的镜像站点
选一个站点,打开gcc或者gdb目录,选择自己想要安装的版本,我这里选择的gcc-10.1.0和gdb-9.2
http://mirrors.nju.edu.cn/gnu/gcc/gcc-10.1.0/
https://mirrors.ustc.edu.cn/gnu/gdb/
解压gcc-10.1.0.tar.gz后进入目录,执行./contrib/download_prerequisites下载gcc依赖
如果下载脚本执行失败,可以到这里下载https://gcc.gnu.org/pub/gcc/infrastructure/
接下来要执行./configure,但是选项太多我们不知道怎么选择,可以执行gcc -v查看旧版本gcc的配置选项
../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info \
--with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \
--enable-shared --enable-threads=posix --enable-checking=release \
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \
--enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu \
--enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin \
--enable-initfini-array --disable-libgcj --enable-gnu-indirect-function \
--with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
我们可以看到centos的默认gcc版本的配置选项,我们就按照这个执行,先创建一个build文件夹存放编译出来的文件
接下来就是make -j 16&&make install,然后等待
安装完成后,需要检查一下libstdc++库,如果libstdc++.so.6软链接指向的不是编译出来的最新so,那么gcc编译代码可以成功,但是运行的时候会报错/lib64/libstdc++.so.6: version 'CXXABI_1.X.X' not found,这个时候我们可以使用strings /usr/lib64/libstdc++.so.6 | grep CXXABI来查看当前指向的so里面肯定没有包含CXXABI_1.X.X
解压gdb-9.2.tar.gz后进入目录,接下来要执行./configure,但是选项太多我们不知道怎么选择,我们先进入gdb,执行show configuration,查看旧版本gdb的配置选项
../configure \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--host=x86_64-pc-linux-gnu \
--target=x86_64-pc-linux-gnu \
--with-expat \
--with-zlib \
--with-gdb-datadir=/usr/share/gdb \
--with-jit-reader-dir=/usr/lib/gdb \
--without-libunwind-ia64 \
--with-lzma \
--with-babeltrace \
--without-intel-pt \
--with-mpfr \
--with-xxhash \
--with-python=/usr/bin/python \
--with-guile \
--disable-source-highlight \
--with-separate-debug-dir=/usr/lib/debug
我们可以看到gdb的配置选项,我们就按照这个执行,先创建一个build文件夹存放编译出来的文件
接下来就是make -j 16&&make install,然后等待