参考 安装GCC-8.3.0及其依赖 在 win10 + vmware15 + ubuntu16.04(gcc4.8.5) 环境下 成功安装 gcc9.3.0 以此研究C++17/C++20/C17的特性。注意:C17只是修复了C11中的bug,并未引入新的语言特性。
文章目录
1.前言
为体验C17和C++17特性,需安装更新版本的GCC编译器。
GCC官网为:https://gcc.gnu.org/,从这可下载最新版本的GCC。
本文在 ubuntu 中安装 gcc 9.3.0.
gcc 9.3.0 (发布于 2020.03.12 )安装于 2020.08.14,截至该日期最新版本为 gcc 10.2.
注意: ubuntu 20.04 默认自带的gcc版本就是 gcc 9.3.0.
2. gcc源码 github镜像
- https://github.com/gcc-mirror/gcc (gcc 官网原仓库)
- https://mirrors.tuna.tsinghua.edu.cn/git/gcc.git(清华大学开源镜像)
清华大学 gcc 开源镜像使用方法(如下),也可参考 官网帮助文档
特别注意:https://mirrors.tuna.tsinghua.edu.cn/git/gcc.git
此地址用 git 可以访问,但用浏览器不可以访问。
如需克隆 GCC 代码,使用
git clone https://mirrors.tuna.tsinghua.edu.cn/git/gcc.git
若要将 tuna mirror 加入已有代码库,可在已有仓库中运行
git remote add tuna https://mirrors.tuna.tsinghua.edu.cn/git/gcc.git
或运行
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/gcc.git
将默认上游设置为 TUNA 镜像
3. GCC国内镜像下载地址
下载速度不一,请选择速度最快的:
- https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/ (清华大学开源镜像)
- https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.3.0/(中国科学技术大学开源软件镜像)
- https://mirrors.nju.edu.cn/gnu/gcc/gcc-9.3.0/ (南京大学开源镜像站)
- https://mirrors.huaweicloud.com/gnu/gcc/gcc-9.3.0/ (华为云开源镜像)
第4部分 gcc 的依赖库可在以上4个开源镜像的 `*/gnu/ 路径下下载,eg: 使用 清华大学开源镜像 下载 gmp、mpfr、mpc、m4 ,其下载链接如下:
https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/*
https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/*
https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/*
https://mirrors.tuna.tsinghua.edu.cn/gnu/m4/*
* 指定下载的版本
4. GCC的依赖库
编译之前需先安装好GCC的依赖库:gmp、mpfr 和 mpc。编译还依赖 m4 等编译工具,如果没有,则在执行configue
时会报相应的错误,这时需要先安装好这些编译工具。
4.1. gmp库
GMP为“GNU MP Bignum Library”的缩写,是一个GNU开源数学运算库。本文选择的是最新版本gmp-6.2.0.
4.2. mpfr库
mpfr是一个GNU开源大数运算库,它依赖gmp。本文选择的是最新版本mpfr-4.0.2.
4.3. mpc库
mpc是GNU的开源复杂数字算法,它依赖gmp和mpfr。本文选择的是最新版本mpc-1.1.0.
4.4. m4编译工具
M4 是一个宏处理器.将输入拷贝到输出,同时将宏展开. 宏可以是内嵌的也可以是用户定义的. 除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行Unix命令,整数运算,文本操作,循环等. m4既可以作为编译器的前端也可以单独作为一个宏处理器.
本文选择的是最新版本m4-1.4.16.
如果使用“–prefix”指定了安装目录,则在编译gmp等之前还需先设置好环境变量PATH,以便configure时能找到m4。
4.5. 安装源代码包
涉及到的所有安装源代码包:
m4-1.4.16.tar.gz (2011-03-01)
gcc-9.3.0.tar.gz (2020-03-12)
mpfr-4.0.2.tar.gz (2015-02-20)
gmp-6.2.0.tar.xz (2020-01-18)
mpc-1.1.0.tar.gz (2018-01-11)
GCC的依赖库间还互有依赖:mpfr依赖gmp、mpc依赖gmp和mpfr,所以GCC的编译安装顺序为:
- m4(如果需要)
- gmp
- mpfr
- mpc
- GCC
为了不污染已有的编译和运行环境,将GCC及依赖库均安装到/usr/local目录,并且最好以root用户完成下述所有操作。
5.安装 M4
5.1 使用 apt install m4 安装
sudo apt install m4
这种方式无需手动解决依赖库。
5.2 使用 m4 源码安装
这种方式可能需要手动解决依赖库。
m4 一般安装路径为/usr/bin/m4
,如果系统没有安装m4, 需手动下载 从 “https://www.gnu.org/software/m4/” 下载安装。
预计所需编译时间: 0.1 SBU
预计所需硬盘空间: 3.0 MB
M4 安装依赖关系
M4 依赖于: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
注意: 安装时系统必须预装 gcc 的某个版本(本文 gcc 4.8.5).
为编译 M4 做准备:
tar xzf m4-1.4.16.tar.gz
cd m4-1.4.16
./configure --prefix=/usr/local/m4-1.4.16
编译软件包:
make
本软件包自带测试套件,能执行一些测试,以确定它是否编译正确。如果你想运行测试套件,执行下面的命令:
make check
安装软件包:
make install
设置环境变量:
ln -s /usr/local/m4-1.4.16 /usr/local/m4
sudo gedit /etc/profile
# 在/etc/profile 最后添加以下内容,保存。
# 注销,重新登陆 或 重启ubuntu后环境变量生效
# 如果想在设置后,在当前打开的终端立即生效 执行 source /etc/profile
export PATH=/usr/local/m4/bin:$PATH
检查 M4 是否安装成功
m4 --version
安装 m4-1.4.18 出错
起初安装 m4-1.4.18 (发布于 2016-12-31)出现以下错误:
freadahead.c:92:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
92 | #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
| ^~~~~
make[3]: *** [Makefile:1913: freadahead.o] Error 1
make[3]: Leaving directory '/tmp/soft-install/m4-1.4.18/lib'
make[2]: *** [Makefile:1674: all] Error 2
make[2]: Leaving directory '/tmp/soft-install/m4-1.4.18/lib'
make[1]: *** [Makefile:1572: all-recursive] Error 1
make[1]: Leaving directory '/tmp/soft-install/m4-1.4.18'
make: *** [Makefile:1528:all] 错误 2
经查阅资料,确定原因为:M4版本兼容性问题,M4-1.4.18 版本太新,不兼容当前平台,最后将 M4 的版本替换为 M4-1.4.16 问题解决。
5. 编译安装gmp
执行 configure
生成Makefile时,需要用到m4,一般路径为/usr/bin/m4
,如果没有则需要先安装,否则报错“no usable m4”错误。
具体安装步骤如下:
xz -d gmp-6.2.0.tar.xz
tar xf gmp-6.2.0.tar
cd gmp-6.2.0
./configure --prefix=/usr/local/gmp-6.2.0
make
make install
ln -s /usr/local/gmp-6.2.0 /usr/local/gmp
6. 编译安装mpfr
详细安装步骤如下:
tar xzf mpfr-4.0.2.tar.gz
cd mpfr-4.0.2
./configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp
make
make install
ln -s /usr/local/mpfr-4.0.2 /usr/local/mpfr
7. 编译安装mpc
tar xzf mpc-1.1.0.tar.gz
cd mpc-1.1.0
./configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
make
make install
ln -s /usr/local/mpc-1.1.0 /usr/local/mpc
8. 设置LD_LIBRARY_PATH
在编译GCC之前,如果不设置LD_LIBRARY_PATH(如果编译gmp时没有指定“–prefix”时安装,一般不用再显示设置),则可能编译时报 “err