交叉编译gdb源码

1.背景介绍

GDB 全称“GNU symbolic debugger”,诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。
在嵌入式的调试中,避免不了使用gdb进行调试,但是往往目标平台不是x86的,多为arm平台,因此我们需要自己来交叉编译gdb的源码。

环境配置:
实体机:win7
虚拟机:Linux ubuntu 4.15.0-142-generic
使用gdb源码:gdb-8.2.tar.gz
下载地址为:https://ftp.gnu.org/gnu/gdb/
arm的交叉编译链为:arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu
下载地址为:https://developer.arm.com/downloads/-/gnu-rm

2.安装ARM64交叉编译链

2.1 下载交叉编译链

从arm官网下载对应的arm的交叉编译链,arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
解压压缩文件xz -dk arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

2.2 增加环境变量

vim /etc/environment
在PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:"中加入“/linuxshare/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin:”
后面这个是自己环境的交叉编译链的路径;然后reboot即可

2.3 验证arm编译链

此时的arm编译链就可以在任何路径使用了。任意路径输入aarch64然后使用Tab补齐即可出现如下的选择,则说明交叉编译链安装完成。
在这里插入图片描述

3.编译gdb源码

3.1 下载gdb源码

gdb的下载比较简单,在对应的官网就可以下载到,https://ftp.gnu.org/gnu/gdb/
在这里插入图片描述
在此我们选择gdb-8.2.tar.gz

3.2 源码解压

解压压缩文件 tar -zxvf gdb-8.2.tar.gz

1.修改gdb/Makefile.in 里面的-static增加静态编译选项
在这里插入图片描述

2.新建build目录,进入build目录
…/configure --prefix=$PWD --host=aarch64-none-linux-gnu LD=aarch64-none-linux-gnu-ld CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++

然后会生成对应的Makefile文件
make编译或者 make -j4多线程编译,这里我选择的-j4多线程编译,这个依据环境的核选择。然后会在build生成gdb目录,这个里面会生成gdb的ELF可执行文件,这一步编译的过程比较慢,耐心等待即可。

3.3 生成gdb的可执行文件

root@ubuntu:/#file gdb
gdb: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.7.0, not stripped

可以看见生成的gdb是ARM64平台的,且为静态编译。此时便可以在对应的平台进行调试代码了。

原始生成的可以通过strip去掉调试信息,可以减少文件的大小:

aarch64-none-linux-gnu-strip -g gdb
### Linux环境下GDB交叉编译指南 在Linux环境中进行GDB交叉编译通常需要以下几个关键步骤,包括准备交叉工具链、配置GDB源代码以及构建最终的二进制文件。以下是详细的说明: #### 1. 准备交叉工具链 为了能够在目标平台上运行调试器,必须先安装或构建一个适合目标架构的交叉编译工具链。例如,如果目标平台是ARM架构,则需要一个能够生成ARM可执行文件的GCC工具链[^1]。 ```bash sudo apt-get install gcc-arm-linux-gnueabi ``` 上述命令适用于Ubuntu系统,它将安装一个针对ARM架构的交叉编译工具链。对于其他Linux发行版(如OpenSUSE),可以参考类似的包管理工具来安装相应的工具链[^2]。 #### 2. 下载并解压GDB源代码 从GNU官方网站下载最新版本的GDB源代码,并将其解压到工作目录中。 ```bash wget https://ftp.gnu.org/gnu/gdb/gdb-latest.tar.gz tar -xzf gdb-latest.tar.gz cd gdb-<version> ``` #### 3. 配置GDB以支持交叉编译 使用`--target`选项指定目标架构。例如,如果目标平台是ARM,则可以运行以下命令: ```bash ./configure --prefix=/path/to/install --target=arm-linux-gnueabi ``` 此处的`--prefix`参数指定了安装路径,而`--target`参数定义了目标平台的工具链前缀。确保此前缀与之前安装的交叉工具链一致[^1]。 #### 4. 编译并安装GDB 完成配置后,可以开始编译和安装GDB。 ```bash make -j$(nproc) make install ``` `-j$(nproc)`选项用于加速编译过程,通过利用所有可用的CPU核心。编译完成后,GDB将被安装到指定的`--prefix`路径下。 #### 5. 验证交叉编译GDB 可以通过检查生成的GDB是否支持目标平台来验证其正确性。 ```bash /path/to/install/bin/arm-linux-gnueabi-gdb --version ``` 如果输出显示正确的目标平台信息,则表明交叉编译成功。 --- ### 注意事项 - 确保主机系统上已安装所有必要的依赖项,例如`build-essential`、`libncurses-dev`等开发库。 - 如果目标平台的架构不常见,可能需要手动构建交叉工具链。 - 使用`uname -m && cat /etc/*release`命令确认当前操作系统及其版本信息,以便选择合适的工具链和支持库[^3]。 --- ### 示例代码 以下是一个简单的脚本,用于自动化GDB交叉编译过程: ```bash #!/bin/bash # 定义变量 PREFIX="/usr/local/cross" TARGET="arm-linux-gnueabi" # 安装依赖 sudo apt-get update sudo apt-get install -y build-essential libncurses-dev # 下载并解压GDB源代码 wget https://ftp.gnu.org/gnu/gdb/gdb-latest.tar.gz tar -xzf gdb-latest.tar.gz cd gdb-<version> # 配置交叉编译环境 ./configure --prefix=$PREFIX --target=$TARGET # 编译并安装 make -j$(nproc) make install ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值