在 x86_64 和 aarch64 架构下实现源码编译 gcc830

前提条件

  • 提前下载源码 gcc-8.3.0.tar.gz
  • 提前下载 gmp、mpfr、mpc、isl 依赖库

解压源码

解压 gcc-8.3.0.tar.gz

1
tar -zxvf gcc-8.3.0.tar.gz

安装依赖

  • 方法一:
    打开 contrib/download_prerequisites 文件,看到依赖列表:
1
2
3
4
5
6
gmp='gmp-6.1.0.tar.bz2'
mpfr='mpfr-3.1.4.tar.bz2'
mpc='mpc-1.0.3.tar.gz'
isl='isl-0.18.tar.bz2'

base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'

里面的网址打不开了,新的网址为:https://gcc.gnu.org/pub/gcc/infrastructure/,然后手动把对应版本的依赖下载好,不需要解压,直接把压缩包移动到 gcc-8.3.0 源码下。

然后,运行脚本,检查下依赖是否满足:

1
2
3
4
5
6
lhx@ubuntu:~/gcc/gcc-8.3.0$ ./contrib/download_prerequisites
gmp-6.1.0.tar.bz2: 成功
mpfr-3.1.4.tar.bz2: 成功
mpc-1.0.3.tar.gz: 成功
isl-0.18.tar.bz2: 成功
All prerequisites downloaded successfully.
  • 方法二:
    解压 gmp、mpfr、mpc、isl 这些库的源码包 tar.gz 到 gcc-8.3.0 目录下,并把这些库的名字中的版本号去掉,这样编译 gcc 的时候,就能识别到这些库的源码目录,并联合编译这些库。不然编译 gcc 的时候可能报错找不到这些库。
1
2
3
4
cd gcc-8.3.0
tar -xjf gmp-6.1.0.tarbz2
mv gmp-6.1.0 gmp
……

编译安装 gcc

  • 编译选项一:
    1
    2
    3
    mkdir build && cd build
    ../gcc-8.3.0/configure -enable-checking=release -enable-language=c,c++ -disable-multilib --prefix=path/to/gcc830/install
    make -j64 && make install
  • 编译选项二:
    1
    2
    3
    mkdir build && cd build
    ../gcc-8.3.0/configure --prefix=/home/lhx/gcc830/install --enable-shared --enable-threads=posix --enable-languages=c,c++,fortran --disable-multilib
    make -j64 && make install

配置 gcc 环境

.bash_profile 文件添加下面的环境变量:

1
2
3
4
# export gcc-8.3.0
export PATH=path/to/gcc830/install/bin:$PATH
export LD_LIBRARY_PATH=path/to/gcc830/install/lib64:$LD_LIBRARY_PATH
export MANPATH=path/to/gcc830/install/gcc/share/man:$MANPATH

然后输入命令 source .bash_profile 更新后生效,此时通过 which gcc 命令可以查看到已使用自己编译的 gcc 版本。