编译GCC-12.1.0
GCC 版本 | 默认标准 | C++11 支持 | C++14 支持 | C++17 支持 | C++20 支持 | C++23 支持 |
---|---|---|---|---|---|---|
≤ 4.8 | C++98 | 部分 | ❌ | ❌ | ❌ | ❌ |
4.9 | C++98 | 大部分 | 部分 | ❌ | ❌ | ❌ |
5.x | C++14 | ✔️ 完整 | ✔️ 完整 | 草案 | 支持 | ❌ |
6.x | C++14 | ✔️ 完整 | ✔️ 完整 | 部分 | ❌ | ❌ |
7.x | C++14 | ✔️ 完整 | ✔️ 完整 | 大部分 | ❌ | ❌ |
8.x | C++14 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 部分 | ❌ |
9.x | C++14 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 部分 | ❌ |
10.x | C++14 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 大部分 | ❌ |
11.x | C++17 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 大部分 | ❌ |
12.x | C++17 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 部分 |
13.x | C++17 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 部分 |
≥ 14.x | C++17 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | ✔️ 完整 | 部分 |
1. 准备必要的工具
GCC 南大 镜像
yum install -y gcc gcc-c++ make m4 bzip2
m4
- 一个宏处理器。核心功能是读取文本输入,查找并展开其中定义的宏,生成处理后的文本输出。
- 在源代码目录运行
./configure
之前,通常需要先运行 autoreconf (或 autoconf, automake 等) 来生成configure
脚本和其他必要的构建文件。autoreconf
/autoconf
工具需要 M4 才能工作
若无
m4
, 执行make
会报错
make: *** No targets specified and no makefile found. Stop.
2. 编译安装依赖
查看需要的依赖
wget https://mirrors.nju.edu.cn/gnu/gcc/gcc-12.1.0/gcc-12.1.0.tar.gz
tar -zxvf gcc-12.1.0.tar.gz -C /root/src/
head -40 /root/src/gcc-12.1.0/contrib/download_prerequisites
gmp='gmp-6.2.1.tar.bz2'
mpfr='mpfr-4.1.0.tar.bz2'
mpc='mpc-1.2.1.tar.gz'
isl='isl-0.24.tar.bz2'base_url='http://gcc.gnu.org/pub/gcc/infrastructure/'echo_archives() {echo "${gmp}"echo "${mpfr}"echo "${mpc}"
有网环境下载
./contrib/download_prerequisites
离线下载地址
http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2
http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2
http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz
http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.24.tar.bz2
文件 | 源码存放位置 | 依赖 | 目标安装位置 |
---|---|---|---|
gmp | /root/src/ gmp-6.2.1 | 无 | /root/server/ gmp-6.2.1 |
isl | /root/src/ isl-0.24 | gmp | /root/server/ isl-0.24 |
mpfr | /root/src/ mpfr-4.1.0 | gmp | /root/server/ mpfr-4.1.0 |
mpc | /root/src/ mpc-1.2.1 | gmp 、 mpfr | /root/server/ mpc-1.2.1 |
2.1 安装gmp
GNU Multiple Precision Arithmetic Library
- 核心能力: 大整数算术(加、减、乘、除、模、幂、位运算等)、大浮点数算术、有理数算术。
tar -jxf gmp-6.2.1.tar.bz2 -C /root/src/gmp-6.2.1
cd /root/src/gmp-6.2.1
./configure --prefix=/root/server/gmp-6.2.1
make -j8 && make install
2.2 安装isl
Integer Set Library
- 核心能力: 表示和操作线性约束下的整数集合、整数元组之间的仿射关系(映射)、依赖分析、调度计算。
tar -jxf isl-0.24.tar.bz2 -C /root/src/isl-0.24
cd ../isl-0.24
./configure --prefix=/root/server/isl-0.24 --with-gmp-prefix=/root/server/gmp-6.2.1/
make -j8 && make install
2.3 安装mpfr
GNU Multiple Precision Floating-Point Reliable Library
- 高精度浮点数算术(所有基本运算、初等函数如 exp, log, sin, cos 等),严格按照指定的舍入模式(向最近、向零、向正无穷、向负无穷)进行运算
tar -jxf mpfr-4.1.0.tar.bz2 -C /root/src/mpfr-4.1.0
cd ../mpfr-4.1.0
./configure --prefix=/root/server/mpfr-4.1.0 --with-gmp=/root/server/gmp-6.2.1/
make -j8 && make install
2.4 安装mpc
GNU Multiple Precision Complex Library
- 高精度复数算术(加、减、乘、除、幂等),实部和虚部的计算都遵循 MPFR 的精确舍入规则。
tar -zxf mpc-1.2.1.tar.gz -C /root/src/mpc-1.2.1
cd ../mpc-1.2.1
./configure --prefix=/root/server/mpc-1.2.1 --with-gmp=/root/server/gmp-6.2.1/ --with-mpfr=/root/server/mpfr-4.1.0/
make -j8 && make install
3. 安装GCC
3.1 临时库的路径(3.3配置永久)
export LD_LIBRARY_PATH=/root/server/gmp-6.2.1/lib:/root/server/isl-0.24/lib:/root/server/mpfr-4.1.0/lib:/root/server/mpc-1.2.1/lib:$LD_LIBRARY_PATH
3.2 编译&安装
cd /root/src/gcc-12.1.0/
./configure --prefix=/root/server/gcc_12.1.0 --with-gmp=/root/server/gmp-6.2.1/ --with-isl=/root/server/isl-0.24 --with-mpfr=/root/server/mpfr-4.1.0/ --with-mpc=/root/server/mpc-1.2.1 --disable-multilib
make -j8 && make install
3.3 配置环境变量
vi ~/.bashrc
export PATH=/root/server/gcc_12.1.0/bin:$PATH
export LD_LIBRARY_PATH=/root/server/gcc_12.1.0/lib64:/root/server/gmp-6.2.1/lib:/root/server/isl-0.24/lib:/root/server/mpfr-4.1.0/lib:/root/server/mpc-1.2.1/lib:$LD_LIBRARY_PATH
4. 安装过程中遇到的错误
环境变量
LD_LIBRARY_PATH
未生效
error while loading shared libraries: libisl.so.23:
cannot open shared object file: No such file or directory
无m4,在使用
.configure
时会报错
checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin (see config.log for reasons).
若使用
.configure
未配置依赖位置如
./configure --prefix=/root/server/isl-0.24
- 报错提示如下
configure: error: gmp.h header not found