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)
-
解压:
xz -d gdb-7.12.tar.xz
tar -xvf gdb-7.12.tar -
配置生成makefile:
./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=$PWD/output/
-
编译:
make -j8
错误1:
这里错误是指:TRAP_HWBKPT这个宏在signal-consts.h中有定义且为numeric类型,这里又定义为宏所以出现问题了;错误2:
C++标准限制不同类型的变量不能直接比较
将这里修改:make
make install编译完成,通过file查看该文件:
可以看到这个gdb是aarch64 体系文件,可以在aarch64平台运行;
3.2 aarch64 结构的gdb(7.9)
-
解压:
xz -d gdb-7.9.tar.xz
tar -xvf gdb-7.9.tar -
配置生成makefile:
./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=$PWD/output/
-
编译错误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 -
清除上次编译的结果,重新编译:
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)
-
与上述方式类似,在configure时做 不同配置:
./configure --host=x86_64-linux-gnu --target=aarch64-linux-gnu --prefix=$PWD/output/
make j8
make install生成文件:
-
configure的相关配置可以查看:
./configure -h
这里罗列出来上述主要用到的:
build 指当前编译主机的体系结构
host 指编译出来运行程序是跑在哪里,一般与build相同,如果不同则为交叉编译 cross-build
target 按照当前理解为编译出来程序是用于目标平台的,用gdb理解就是在x86上运行,解析aarch64