阿里云的centos系统自带的gcc版本为4.8.5,可以通过gcc -v命令查看
[root@wcz gcc-6.3.0]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
1、如果直接下载gcc6.3.0进行安装升级的话,会报错
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
接下来我们需要以此安装gmp,mpfr,mpc,这三个组件的顺序不能乱,因为后面的依次依赖前面
2、安装相关依赖
yum install "gmp-devel.x86_64"
yum install gcc-c++
yum install m4
3、安装gmp
wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.xz
xz -d gmp-6.1.2.tar.xz
tar xvf gmp-6.1.2.tar
cd gmp-6.1.2
./configure --prefix=/usr/local/gmp
make && make install
4、安装MPFR
wget https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.gz
tar -zxvf mpfr-4.0.2.tar.gz
cd mpfr-4.0.2
在该行代码下面
#define MPFR_VERSION_STRING "4.0.2"
添加代码
#define mpfr_add_one_ulp(x,r) \
(mpfr_sgn (x) > 0 ? mpfr_nextabove (x) : mpfr_nextbelow (x))
#define mpfr_sub_one_ulp(x,r) \
(mpfr_sgn (x) > 0 ? mpfr_nextbelow (x) : mpfr_nextabove (x))
然后执行
./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp
make && make install
5、安装mpc
wget ftp://ftp.gnu.org/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 --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
make && make install
如果报错:mul.c:175:1: error: conflicting types for ‘mpfr_fmma’
则将 mpc/src/mul.c中的 mpfr_fmma函数改名为mpfr_fmma_mul,一共三处
6、升级gcc
wget ftp://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.gz
tar -zxvf gcc-6.3.0.tar.gz
cd gcc-6.3.0
./configure --prefix=/usr/local/gcc --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc
make && make install
如果几分钟后出现报错:
cannot compute suffix of object files: cannot compile
解决方法如下:
vi /etc/profile
添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib
source /etc/profile
重新编译安装即可
7、创建软链接
[root@wcz cpp]# ln -sf /usr/local/gcc/bin/gcc /usr/bin/gcc
[root@wcz cpp]# ln -sf /usr/local/gcc/bin/c++ /usr/bin/c++
[root@wcz cpp]# ln -sf /usr/local/gcc/bin/g++ /usr/bin/g++
[root@wcz cpp]# ln -sf /usr/local/gcc/lib64/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6
8、验证
[root@wcz cpp]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ./configure --prefix=/usr/local/gcc --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc
Thread model: posix
gcc version 6.3.0 (GCC)