记录一次gcc的编译

在deepin23上编译gcc13.2

deepin20素以软件版本过老被人诟病,换成最新的deepin23之后情况大有好转,但是gcc版本为11.2,鄙人对此仍有意见,所以特意研究了如何编译一份较新的gcc来用。


1.下载源码包

http://mirrors.ustc.edu.cn/gnu/gcc/

我相关在中科大镜像站下载东西,选择13.2版本的压缩包

解压

2.准备环境

系统需要安装 gcc 和 g++,构建工具make

对应的库:gmp 、mpc 、mpfr

介绍一下这几个库:

GMP 是一个免费的任意精度算术库,对有符号整数、有理数和浮点数进行运算。

MPFR:GNU多精度浮点舍入库。

MPC是一个复杂数字算法的c语言库,支持任意精度和数字。

安装这三个库的方法:

  1. 在解压出来的项目目录下运行./contrib/download_prerequisites 会自动下载安装这三个库的压缩包。当然这需要联网。(推荐)
  2. 用apt 安装这几个库:libgmp-dev 、libmpc-dev 、libmpfr-dev (不保证一定可行)

3.执行configure文件

sudo ./configure --prefix=/usr/local/gcc13.1.0/ --disable-multilib

--prefix=/usr/local/gcc13.1.0/ 设置编译后文件的安装目录

--disable-multilib 禁止交叉编译(反正我用不到)

4.编译和安装

sudo make -jn

n是编译用到的线程数,按照自己的cpu情况决定

sudo make install

将编译好的文件安装到指定目录下

5.替换掉原来的gcc或g++

将/usr/bin目录下的gcc和g++软连接指向自己编译出来的gcc和个g++

例如:

sudo ln -sf /usr/local/gcc13.1.0/bin/gcc /usr/bin/gcc

sudo ln -sf /usr/local/gcc13.1.0/bin/g++ /usr/bin/g++

要替换g++的话,还需要替换libstdc++.so.6的软连接

以deepin23为例:libstdc++.so.6在/lib/x86_64-linux-gnu目录下

以我的过程为例:用来替换的libstdc++.so.6.0.32在/usr/local/gcc13.2.0/lib64/目录下