目录

  • 1. 下载gcc 9.1.0源码压缩包
  • 2. 解压缩包
  • 3. 检查并配置源码编译的环境
  • 5. 编译gcc源码
  • 6. 安装gcc
  • 7. 使用update-alternatives管理本地多个版本的gcc和g++
    • 7.1 查看本地安装了哪几个gcc程序
    • 7.2 update-alternatives中安装本地所有版本gcc

1. 下载gcc 9.1.0源码压缩包

国内镜像地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.1.0/

2. 解压缩包

将压缩包放到一个目录下(本例为~/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

3. 检查并配置源码编译的环境

执行自带的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/'

方法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

5. 编译gcc源码

sun@sun-pc:~/myproject/gcc/build$ make -j8

6. 安装gcc

使用下面命令进行安装,默认的可执行文件安装路径为/usr/local/bin/,默认的库安装路径为/usr/local/lib/

sun@sun-pc:~/myproject/gcc/build$ sudo make install

Tips:
usr的全称:Unix System Resource

7. 使用update-alternatives管理本地多个版本的gcc和g++

如果本地有多个版本的gcc,可以考虑用update-alternatives进行管理
下面只讲解gcc配置过程,之后记得把g++也配置一下

7.1 查看本地安装了哪几个gcc程序

#查看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下的程序。

7.2 update-alternatives中安装本地所有版本gcc

先切换到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链接路径也就没有意义了。

Linux系列讲解 —— Ubuntu18.04安装gcc 9.1.0(C++17)相关推荐

  1. Ubuntu18.04 安装搭建 hadoop-3.3.0 集群

    Ubuntu18.04 安装搭建 hadoop-3.3.0 集群 参考博文:https://blog.csdn.net/sunxiaoju/article/details/85222290?ops_r ...

  2. Ubuntu18.04 安装Asterisk16.10 + FreePBX15.0

    Ubuntu18.04 安装Asterisk16.10 + FreePBX15.0 1.首先需要先更新一下ubuntu的apt源 cp /etc/apt/sources.list /etc/apt/s ...

  3. ubuntu18.04安装gcc详细步骤(附问题集)

    首先是下载gcc包,可以在GCC的官方网站GCC, the GNU Compiler Collection- GNU Project 下载到各个版本. 目前最高版本是gcc-8.2.0. 一.在安装g ...

  4. 【Linux】43.ubuntu18.04安装搜狗输入法不能正常使用

    对于某些电脑,直接下载最新的搜狗输入法,是不能在ubuntu18.04上直接使用的.但是老版本的可以使用,我自己测试使用这个版本的搜狗可以直接使用:sougoupinyin_2.4.0.2732_am ...

  5. Ubuntu18.04 安装 gcc

    在Ubuntu18.04下安装gcc的指令: sudo add-apt-repository ppa:unbutu-toolchain-r/test sudo apt-get update sudo ...

  6. cadence virtuoso为什么只能在linux下运行,ubuntu18.04安装cadence virtuoso

    最近需要做一些集成电路设计相关的工作,研究了一下,还挺复杂.不过千里之行,始于足下,再复杂的东西也是一步步由简单的东西构建而成的.根据工作需要 ,安装了全定制集成电路设计软件IC617,下面记录一下过 ...

  7. Ubuntu18.04安装gcc

    为了能够在Ubuntu系统上添加新存储库和安装软件包,您必须以具有sudo权限的用户身份登录. 在Ubuntu上安装GCC 默认的Ubuntu存储库包含一个名为build-essential的元包,它 ...

  8. Ubuntu18.04 安装opencv 3.2.0 ,opencv3.4.15

    1. 源码 https://github.com/opencv/opencv 2. 安装依赖 sudo apt-get install build-essential sudo apt-get ins ...

  9. Ubuntu18.04安装配置OpenCv4.1.0

    1. 安装依赖项 请确保ubuntu已经安装了g++, cmake, make, wget, unzip,vim若没有安装,则使用以下命令安装依次执行: sudo apt install -y g++ ...

最新文章

  1. java 数组集合转换_Java 实例 – 集合转数组
  2. healpy的安装(包括healpix)
  3. UIBarButtonSystemItem 各种款式
  4. Spring源码由浅入深系列一 简介
  5. 从零写一个编译器(一):输入系统和词法分析
  6. mutli-lane情况
  7. idea2020代码el组件红色波浪线_Android实现炫酷的ViewPager3D组件
  8. javascript学习之利用方向键控制div模块的移动
  9. 云服务器网站301重定向跳转有什么作用?
  10. c#变量初始化的学习
  11. java中将汉字转拼音,解决pinyin4j多音节问题
  12. 深入浅出Mybatis系列(五)Mybatis事务篇
  13. 使用 vue-waterfall2插件 vue 瀑布流
  14. 回忆借你的曾经—致我们终将逝去的青春_伤感日志
  15. Linux网络——DNS域名解析服务
  16. matlab设计椭圆低通滤波器,【 MATLAB 】ellip 函数介绍(椭圆滤波器设计)
  17. 初识机器阅读理解(Machine Reading Comprehension)
  18. 程序员专属壁纸十七张
  19. Arthas开源一周年,Github Star 16K,我们一直在坚持什么?
  20. OPPO R9st怎么刷机 OPPO R9st的刷机教程 OPPO R9st完美解除账号锁

热门文章

  1. 获取指数成分股,并区别‘sz’,‘sh’
  2. TypeScript将字符串转换为数字
  3. 微信小程序跳到第三方地图
  4. 2020全球数字价值峰会即将开幕,第一波重磅嘉宾陆续揭晓!
  5. form表单提交FormData数据
  6. Django生产环境部署—Ubuntu20.04 server安装(一)
  7. 01-centos 7 单机部署ELK
  8. Python -- Numpy库的使用
  9. 查询mysql版本号
  10. 业内人士透露:百联与阿里“联姻”,三个没想到!