快捷搜索: 王者荣耀 脱发

gdb 7.X 下载编译(aarch64)

gdb 7.X 下载编译(aarch64)

1. gdb源码下载

ubuntu系统中有自带的gdb软件,用于跟踪x86体系的程序: 当然我们要在嵌入式系统中运行的话,还需要抓取源码,进行交叉编译,下载路径:https://ftp.gnu.org/gnu/gdb/ 当前最新版本更新到了10.1,这里我下载一个平时常用的版本:7.9 / 7.12

可以直接网页下载:

也可以命令行下载:

wget http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.xz

2. 交叉编译工具下载

2.1 搜索支持的工具版本:

sudo apt-cache search aarch64

ubuntu 20.04 中可以搜索到这些版本,我这里安装版本9;

2.2 下载安装:

sudo apt-get install g+±9-aarch64-linux-gnu sudo apt-get install g+±aarch64-linux-gnu

2.3 安装完成后查看gcc版本确认是否安装成功

aarch64-linux-gnu-gcc -v x86_64-linux-gnu-gcc -v

从上述图示可以说明安装成功; PS:交叉编译工具链有几个网站会提供,这里直接使用ubuntu apt安装相对方便一些;

3 编译

3.1 aarch64 结构的gdb(7.12)

  1. 解压: xz -d gdb-7.12.tar.xz tar -xvf gdb-7.12.tar
  2. 配置生成makefile: ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=$PWD/output/
  3. 编译: make -j8 错误1: 这里错误是指:TRAP_HWBKPT这个宏在signal-consts.h中有定义且为numeric类型,这里又定义为宏所以出现问题了; 错误2: C++标准限制不同类型的变量不能直接比较 将这里修改: make make install 编译完成,通过file查看该文件:

可以看到这个gdb是aarch64 体系文件,可以在aarch64平台运行;

3.2 aarch64 结构的gdb(7.9)

  1. 解压: xz -d gdb-7.9.tar.xz tar -xvf gdb-7.9.tar
  2. 配置生成makefile: ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=$PWD/output/
  3. 编译错误1: make -j8 错误提示: 安装termcap库: wget http://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz gzip -d termcap-1.3.1.tar.gz tar -xvf termcap-1.3.1.tar ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=$PWD/…/gdb-7.9/output/ 生成的Makefile中并非使用aarch64编译工具编译,需要修改Makefile: vim Makefile make -8 make install termcap生成在了gdb的路径下,然后重新编译gdb
  4. 清除上次编译的结果,重新编译: make clean make distclean ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=$PWD/output/ make -j8 出现新的错误: 这里主要是导入系统头文件和gdb自己实现头文件的冲突问题; 将上述冲突的函数注释掉后即可编译通过,不确认在使用中是否会存在问题;

3.3 编译在x86下运行的gdb程序(解析aarch64体系coredump)

  1. 与上述方式类似,在configure时做 不同配置: ./configure --host=x86_64-linux-gnu --target=aarch64-linux-gnu --prefix=$PWD/output/ make j8 make install 生成文件:
  2. configure的相关配置可以查看: ./configure -h 这里罗列出来上述主要用到的: build 指当前编译主机的体系结构 host 指编译出来运行程序是跑在哪里,一般与build相同,如果不同则为交叉编译 cross-build target 按照当前理解为编译出来程序是用于目标平台的,用gdb理解就是在x86上运行,解析aarch64
经验分享 程序员 微信小程序 职场和发展