赞
踩
国内镜像地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.1.0/
将压缩包放到一个目录下(本例为~/myproject/gcc),然后解压
sun@sun-pc:~/myproject/gcc$ tar -zxvf gcc-9.1.0.tar.gz
...
sun@sun-pc:~/myproject/gcc$ ls
gcc-9.1.0 gcc-9.1.0.tar.gz
执行自带的configure即可
sun@sun-pc:~/myproject/gcc$ mkdir build #创建个目录专门用于存放编译文件等
sun@sun-pc:~/myproject/gcc$ cd build
sun@sun-pc:~/myproject/gcc/build$ ../gcc-9.1.0/configure
sun@sun-pc:~/myproject/gcc/build$ ls
config.log config.status Makefile serdep.tmp #成功后可以看到生成了Makefile文件
注: 如果configure执行失败,报错如下
checking build system type... x86_64-pc-linux-gnu
...
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
...
提示有三个库找不到,分别是GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+
进入gcc源码目录,使用download_prerequisites脚本下载安装缺失的库,如下:
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ./contrib/download_prerequisites
如果上面的download_prerequisites命令由于网络超时导致下载失败,这里提供两个方法解决:
方法1:可以尝试更改download_prerequisites的url,然后重新执行download_prerequisites
#base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/' base_url='http://mirror.linux-ia64.org/gnu/gcc/infrastructure/'
- 1
- 2
方法2:直接浏览器访问http://mirror.linux-ia64.org/gnu/gcc/infrastructure/下载gmp-6.1.0.tar.bz2,mpfr-3.1.4.tar.bz2,mpc-1.0.3.tar.gz(其他版本只要大于提示的GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+都可以),然后解压后做好链接
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ tar -jxvf gmp-6.1.0.tar.bz2 sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ tar -zxvf mpc-1.0.3.tar.gz sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ tar -jxvf mpfr-3.1.4.tar.bz2 sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ls ... gmp-6.1.0 mpc-1.0.3 mpfr-3.1.4 ... #解压后生成的三个目录 sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ln -s gmp-6.1.0 gmp sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ln -s mpc-1.0.3 mpc sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ln -s mpfr-3.1.4 mpfr
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
sun@sun-pc:~/myproject/gcc/build$ make -j8
使用下面命令进行安装,默认的可执行文件安装路径为/usr/local/bin/
,默认的库安装路径为/usr/local/lib/
sun@sun-pc:~/myproject/gcc/build$ sudo make install
Tips:
usr的全称:Unix System Resource
如果本地有多个版本的gcc,可以考虑用update-alternatives进行管理
下面只讲解gcc配置过程,之后记得把g++也配置一下
#查看gcc的可执行文件及库文件位置,可以看到有两处
sun@sun-pc:~$ whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/local/bin/gcc /usr/local/lib/gcc /usr/share/man/man1/gcc.1.gz
#/usr/bin/gcc是原先安装的7.5.0版本
sun@sun-pc:~$ ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 5 5月 21 2019 /usr/bin/gcc -> gcc-7
#/usr/local/bin/gcc是本次安装的9.1.0版本
sun@sun-pc:~$ ls -l /usr/local/bin/gcc
-rwxr-xr-x 3 root root 7111040 8月 21 14:33 /usr/local/bin/gcc
#使用gcc命令查看版本,可以看到是9.1.0,说明终端里执行的程序是/usr/local/bin下的gcc
sun@sun-pc:~$ gcc --version
gcc (GCC) 9.1.0
Copyright © 2019 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
问:为什么gcc命令默认是执行的/usr/local/bin/gcc,而不是/usr/bin/gcc ?
答:看下图,终端的环境变量中,/usr/local/bin在/usr/bin之前,所以优先执行/usr/local/bin下的程序。
先切换到root用户,然后执行下面命令分别将两个版本的gcc配置到update-alternatives列表中。
1. 配置gcc 7.5.0到update-alternatives列表
root@sun-pc:~# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1
update-alternatives: 使用 /usr/bin/gcc-7 来在自动模式中提供 /usr/bin/gcc (gcc)
2. /usr/local/bin/gcc和gcc命令名字冲突,配置gcc 9.1.0之前先更改一下/usr/local/bin/gcc的名字
root@sun-pc:~# mv /usr/local/bin/gcc /usr/local/bin/gcc-9
root@sun-pc:~# update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-9 2
update-alternatives: 使用 /usr/local/bin/gcc 来在自动模式中提供 /usr/bin/gcc (gcc)
至于具体如何使用请查看Linux系列讲解 —— 本地软件版本管理工具update-alternatives,此处就不在详述了。
/usr/local/bin/gcc需要改名的原因:
上面7.1提到过会优先执行/usr/local/bin下的gcc,如果不改名,在终端输入gcc命令时,系统先在/usr/local/bin/下找到了gcc,那么就会执行这个路径的gcc,而不会执行/usr/bin下的符号链接gcc。那么update-alternatives更换gcc链接路径也就没有意义了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。