C++ compiler (CXX=g++, 4.8.5) too old, need g++ 6.3.0

前言

在nodejs源码编译时用到了gcc升级,由于源码使用到了c++,gcc版本太低,大于6.3即可

[root@baidu1 node-v12.18.2]# ./configure
WARNING: C++ compiler (CXX=g++, 4.8.5) too old, need g++ 6.3.0 or clang++ 8.0.0
WARNING: warnings were emitted in the configure phase
INFO: configure completed successfully
[root@baidu node-v12.18.2]# gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 

下载解压

gcc下载地址Index of /gnu/gcc,可以找到任意版本的.tar.gz

[root@baidu1 node-v12.18.2]# cd /usr/local/
#下载gcc安装包
[root@baidu1 local]# wget http://ftp.gnu.org/gnu/gcc/gcc-7.1.0/gcc-7.1.0.tar.gz
--2020-07-08 13:49:37--  http://ftp.gnu.org/gnu/gcc/gcc-7.1.0/gcc-7.1.0.tar.gz
Resolving ftp.gnu.org (ftp.gnu.org)... 209.51.188.20, 2001:470:142:3::b
Connecting to ftp.gnu.org (ftp.gnu.org)|209.51.188.20|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 108377377 (103M) [application/x-gzip]
...
[root@baidu1 local]# ls
bin  etc  games  gcc-7.1.0.tar.gz include  lib  lib64  libexec  sbin  share  src
[root@baidu1 local]# tar -zxvf gcc-7.1.0.tar.gz 

安装依赖包

官方提供了脚本自动化

root@baidu1 local]# cd gcc-7.1.0/
#执行gcc给出的shell,它会去下载所需4个依赖包
[root@baidu1 gcc-7.1.0]# vi ./contrib/download_prerequisites 
...
gmp='gmp-6.1.0.tar.bz2'
mpfr='mpfr-3.1.4.tar.bz2'
mpc='mpc-1.0.3.tar.gz'
isl='isl-0.16.1.tar.bz2'

base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'
...
#他们的URL分别是
#ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
#ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
#ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
#ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2
[root@baidu1 gcc-7.1.0]# ./contrib/download_prerequisites
#执行后会比较慢,担心卡住可以再开个tab查看进程,它是用的wget下载
[wang@baidu1 ~]$ ps -ef |grep wget
root       3129   3126  0 13:58 pts/0    00:00:00 wget --no-verbose -O ./isl-0.16.1.tar.bz2 ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2
wang       3143   3016  0 13:58 pts/1    00:00:00 grep --color=auto wget

[root@baidu1 gcc-7.1.0]# ./contrib/download_prerequisites 
2020-08-01 13:42:10 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2020-08-01 13:43:23 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2020-08-01 13:43:51 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2020-08-01 13:45:14 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 [1626446] -> "./isl-0.16.1.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.16.1.tar.bz2: OK
All prerequisites downloaded successfully.

如果执行一半给退了,可以根据报错信息删掉
mpc-1.0.3.tar.gz: FAILED
sha512sum: WARNING: 1 computed checksum did NOT match
error: Cannot download mpc-1.0.3.tar.gz from ftp://gcc.gnu.org/pub/gcc/infrastructure/
rm -rf mpc-1.0.3.tar.gz 

gcc源码编译

建议先安装几个依赖包,避免返工

yum install m4 -y

yum install gmp-devel.x86_64 -y

yum install mpfr-devel.x86_64 -y

yum install gcc-c++.x86_64 -y

#新建编译目录
[root@baidu1 local]# mkdir gcc-build-7.1.0
[root@baidu1 local]# cd gcc-build-7.1.0
[root@baidu gcc-build-7.1.0]# /usr/local/gcc-7.1.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
//加上-j参数,-j4和-j8性能差距不大,-j16性能就比较差,make大概3-4小时
[root@baidu1 gcc-build-7.1.0]# make -j4
[root@baidu1 gcc-build-7.1.0]# make install
...
----------------------------------------------------------------------
make[4]: Nothing to be done for `install-data-am'.
make[4]: Leaving directory `/usr/local/gcc-build-7.1.0/x86_64-pc-linux-gnu/libatomic'
make[3]: Leaving directory `/usr/local/gcc-build-7.1.0/x86_64-pc-linux-gnu/libatomic'
make[2]: Leaving directory `/usr/local/gcc-build-7.1.0/x86_64-pc-linux-gnu/libatomic'
make[1]: Leaving directory `/usr/local/gcc-build-7.1.0'
[root@baidu gcc-build-7.1.0]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /usr/local/gcc-7.1.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 7.1.0 (GCC)

如果显示的gcc版本仍是以前的版本,就需要重启系统

校验

[root@baidu opt]# cd node-v12.18.2/
[root@baidu node-v12.18.2]# ./configure
INFO: configure completed successfully
[root@baidu node-v12.18.2]# 

升级成功。 

环境变量

cd /usr/bin
rm -rf gcc g++ c++
ln -s /usr/local/gcc10.2.0/bin/gcc gcc
ln -s /usr/local/gcc10.2.0/bin/g++ g++
ln -s /usr/local/gcc10.2.0/bin/c++ c++

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值