从源代码编译安装gcc,并使用gdb调试gcc

1.编译安装gcc

1)下载gcc
如果想安装指定版本的gcc, 就从镜像网站上下载源代码,例如安装gcc.11.1(其他版本去镜像网站上选就行),使用如下命令:

wget http://mirror.linux-ia64.org/gnu/gcc/releases/gcc-11.1.0/gcc-11.1.0.tar.xz
tar -Jxvf gcc-11.1.0.tar.xz
cd gcc-11.1.0

如果想安装当前最新的gcc, 就从git master上下载:
git clone git://gcc.gnu.org/git/gcc.git
2) 安装准备
以Ubuntu为例

sudo apt-get install build-essential libgmp-dev libmpfr-dev libmpc-dev
sudo apt-get install flex bison texinfo

3)cd到下载的gcc代码主目录中,下载一些必要的库
./contrib/download_prerequisites
4)在gcc主目录外面,新建两个文件夹,分别用于编译和安装,主要的过程在编译文件夹中
cd .. && mkdir temp_gcc && mkdir usr_gcc && cd temp_gcc
5)进行conifg配置来创建makefile,这里需要将路径设置成前面新建的安装目录
../gcc/configure --prefix=/home/mike/gcc/gcc12/usr_gcc --enable-threads=posix --disable-checking --disable-multilib --disable-bootstrap

对于上面的配置选项

  1. --disable-bootstrap表示不启动3阶段编译,也就是只将源码编译一次,可缩短编译时间。也可以不加这个,gcc源代码就会被编译3次;
  2. gcc会自动识别当前的机器类型,所以不用指定--host=x86_64-pc-linux-gnu
  3. 根据需要,也可以增加 --enable-languages=c,c++,生成的gcc就只支持c,c++,以减小安装包,默认是支持c,c++,fortran,objc,objc++
  4. 配置后,会生成makefile, 可以在生成的makefile中修改编译gcc源代码的选项,默认是-O2 -g等
    详细的配置选项说明,可参考gcc的安装配置选项
    6)编译
    make -j8
    7)安装
    make install
    8)测试
    cd /home/mike/gcc/gcc12/usr_gcc/bin
    ./gcc -v
    安装完成后,在环境变量中新建一个软链接,链接到这个./gcc就可以使用了。gcc不支持使用命令行来卸载,要卸载的话直接删除temp_gcc && usr_gcc 这两个文件夹即可。

修改gcc代码后再次编译安装,最好将usr_gcc和temp_gcc两个文件夹删除,然后重复步骤4)- 7)。

2.使用gdb调试gcc代码

  1. 调试driver-i386.cc等驱动程序的代码,直接使用如下命令:
    gdb --args ./gcc -Wall -O3 hello.c
    然后在driver-i386.cc中打断点。
  1. 调试任意其他的代码,如tree-ssa-reassoc.cc等:
    先调用usr_gcc/bin中的./gcc,将输入的源代码编译成.i文件
    ./gcc -O3 -fopenmp -E hello.c -o hello.i
    再调用temp_gcc/gcc中的./cc1,将.i文件编译成.s文件,同时调试gcc源代码
    gdb --args ./cc1 -O3 -fopenmp hello.i
    然后在需要调试的代码中打断点。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容