一、环境准备
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三个依赖包,如果想偷懒就使用下面的命令一键安装:
1 |
sudo yum install -y gmp-devel mpfr-devel libmpc-devel |
建议使用yum自动安装,手动安装麻烦且费时。
这三个组件还可以使用官方提供的安装脚本安装:./contrib/download_prerequisite,比较耗时。
安装gmp
1 2 3 4 5 6 7 |
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
1 2 3 4 5 6 7 |
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
1 2 3 4 5 6 7 |
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的文件作为库的搜索路径就可以了。
1 2 3 4 |
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 |
二、编译安装
1 2 3 4 5 6 7 8 9 10 |
# 下载源码包 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
目录下的文件结构:
1 2 3 4 5 6 7 8 |
> # 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
目录下,创建软链接即可使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 备份原有的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 更新动态库
升级库后,运行程序可能会报一下错误:
1 |
/usr/lib64/libstdc++.so.6: version ‘CXXABI_1.3.9’ not found |
评论