一、环境准备
1.1 安装包下载
所有的安装包可在http://mirror.team-cymru.com/gnu/找到。
GCC下载地址:GCC7.2.0,三个主要依赖组件下载地址:mpfr-4.0.1,mpc-1.0.3,gmp-6.1.2。
1.2 安装依赖项
使用yum安装的依赖项:yum install -y glibc-headers gcc-c++ automake autoconf
。
对于gmp, mpfr和mpc三个依赖包,如果想偷懒就使用下面的命令一键安装:
sudo yum install -y gmp-devel mpfr-devel libmpc-devel
建议使用yum自动安装,手动安装麻烦且费时。
这三个组件还可以使用官方提供的安装脚本安装:./contrib/download_prerequisite,比较耗时。
安装gmp
wget http://mirror.team-cymru.com/gnu/gmp/gmp-6.1.2.tar.xz
tar -Jxvf gmp-6.1.2.tar.xz
cd gmp-6.1.2
./configure --prefix=/usr/local/gmp-6.1.2
make && make check
sudo make install
sudo ln -s /usr/local/gmp-6.1.2 /usr/local/gmp
安装mpfr
wget http://mirror.team-cymru.com/gnu/mpfr/mpfr-3.1.6.tar.xz
tar -Jxvf mpfr-3.1.6.tar.xz
cd mpfr-3.1.6
./configure --prefix=/usr/local/mpfr-3.1.6 --with-gmp=/usr/local/gmp
make && make check
sudo make install
sudo ln -s /usr/local/mpfr-3.1.6 /usr/local/mpfr
安装mpc
wget http://mirror.team-cymru.com/gnu/mpc/mpc-1.0.3.tar.gz
tar -zxvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
make && make check
sudo make install
sudo ln -s /usr/local/mpc-1.0.3 /usr/local/mpc
添加动态库到系统搜索路径
动态库的默认搜索路径都在/etc/ld.so.conf
文件中,这个文件里面包含了/etc/ld.so.conf.d/
目录下的所有文件。所以只要在这个目录下创建一个gcc的文件作为库的搜索路径就可以了。
sudo echo "usr/local/mpc/lib" > /etc/ld.so.conf.d/gcc.conf
sudo echo "/usr/local/mpfr/lib" > /etc/ld.so.conf.d/gcc.conf
sudo echo "/usr/local/gmp/lib" > /etc/ld.so.conf.d/gcc.conf
sudo ldconfig
二、编译安装
# 下载源码包
wget http://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.gz
tar -zxf gcc-7.2.0.tar.gz && cd gcc-7.2.0
# 创建一个文件夹存放编译文件
mkdir build && cd build
# 配置configure
../configure --prefix=/usr/local/gcc7 --enable-languages=c,c++,go --disable-multilib \
--with-gmp=/usr/local/gmp --with-mpc=/usr/local/mpc --with-mpfr=/usr/local/mpfr
# 编译并安装
make && make install
mpc/mpfr/gmp这三个组件如果使用yum安装了,执行./configure那行时就不用带上后面三个参数了,否则必须手动指定库文件的路径。执行make install需要管理员权限。
编译安装十分考验机器的配置,腾讯云1G1H GCC6.2
用时1小时,阿里云2G1H GCC7.2.0
用时2.5小时,本地虚拟机2G2H GCC7.2.0
用时4+小时。
安装完成后/usr/local/gcc7
目录下的文件结构:
> # ll
total 24
drwxr-xr-x. 2 root root 4096 Jan 7 10:44 bin
drwxr-xr-x. 3 root root 4096 Jan 7 10:44 include
drwxr-xr-x. 3 root root 4096 Jan 7 10:42 lib
drwxr-xr-x. 3 root root 4096 Jan 7 10:47 lib64
drwxr-xr-x. 3 root root 4096 Jan 7 10:42 libexec
drwxr-xr-x. 6 root root 4096 Jan 7 10:46 share
gcc
和g++
等可执行文件存放在bin
目录下,创建软链接即可使用。
# 备份原有的gcc和g++命令
> mv /usr/bin/gcc /usr/bin/gcc4
> mv /usr/bin/g++ /usr/bin/g++4
# 生成新的软链接
> ln -s /usr/local/gcc7/bin/gcc /usr/bin/gcc
> ln -s /usr/local/gcc7/bin/g++ /usr/bin/g++
# 查看gcc版本
> gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc7/libexec/gcc/x86_64-pc-linux-gnu/7.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/usr/local/gcc7 --enable-languages=c,c++,go --disable-multilib
Thread model: posix
gcc version 7.2.0 (GCC)
# 查看g++版本
> g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/gcc7/libexec/gcc/x86_64-pc-linux-gnu/7.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/usr/local/gcc7 --enable-languages=c,c++,go --disable-multilib
Thread model: posix
gcc version 7.2.0 (GCC)
三、后续操作
3.1 更新动态库
升级库后,运行程序可能会报一下错误:
/usr/lib64/libstdc++.so.6: version ‘CXXABI_1.3.9’ not found
此处评论已关闭