当前位置: 首页 > news >正文

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver

gdb是一款开源的、强大的、跨平台的程序调试工具。主要用于在程序运行时对程序进行控制和检查,如设置断点、单步执行、查看变量值、修改内存数据等,从而帮助开发者定位和修复代码中的错误。
gdbserver则是GDB的一个辅助工具,主要用于调试嵌入式系统或者没有图形界面的目标系统上的程序。GDBServer在目标设备上运行,将目标程序的状态信息通过网络发送给宿主机上的GDB,使GDB能够像调试本地程序一样调试远程的目标程序。这样,开发人员就可以在宿主机上使用GDB的各种功能,而不需要在目标设备上安装和运行复杂的调试环境。
说明:本教程适用于ubuntu环境下交叉编译gdbserver,目标架构为aarch64小端。

一、准备阶段

根据需求,准备gdb源代码和aarch64-linux-gnu交叉编译工具链。
博主选择的gdb源代码以及aarch64-linux-gnu交叉编译工具链分别是,gdb8.3gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu.tar.xz(aarch64小端)

gdb源代码地址:https://ftp.gnu.org/gnu/gdb/

在这里插入图片描述

交叉编译工具链下载地址:https://developer.arm.com/downloads/-/gnu-a

在这里插入图片描述

注意:在选择交叉编译工具链时,一定要明确目标架构大小端。

二、编译安装gdb

首先通过configure配置gdb编译选项,再进行编译和安装。

(一)、配置gdb编译选项

cd gdb8.3
./configure --target=aarch64-linux-gnu --prefix=/home/hhl/gdbserver
参数说明:--target 目标架构--prefix 自定义gdb编译安装路径

在这里插入图片描述

(二)、编译gdb

cd gdb8.3
make -j8
参数说明:--j8 并行编译(8

在这里插入图片描述

(三)、安装gdb

cd gdb8.3
make install

在这里插入图片描述
在这里插入图片描述

三、交叉编译gdbserver
(一)、配置gdbserver编译选项

由于gdbserver需要移植到目标环境中运行,为了避免环境的影响,因此采取静态编译的方式。

cd gdb8.3/gdb/gdbserver
LDFLAGS="-static" ./configure --target=aarch64-linux-gnu --host=aarch64-linux-gnu  --disable-shared --enable-static 
参数说明:LDFLAGS="-static"  静态编译--target 目标架构--prefix 自定义gdb编译安装路径--disable-shared --enable-static 可选参数,静态编译。

(二)、交叉编译gdbserver

使用绝对路径正确配置gcc和g++的路径。

make CC=/home/hhl/gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/home/hhl/gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ -j8
参数说明:CC gcc路径cXX g++路径

在这里插入图片描述

交叉编译成功后,gdbservergdb8.3/gdb/gdbserver路径下

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何从数码相机恢复已删除的照片
  • Python开发—— 列表的高级操作与应用
  • spring监听事件
  • Obsidian 文档编辑器
  • R 绘图 - 饼图
  • 【ROS2】中级-编写动作服务器和客户端(Python)
  • 从零手写实现 nginx-26-rewrite url 重写
  • javafx基础知识
  • 【RAG KG】GraphRAG开源:查询聚焦摘要的图RAG方法
  • 打卡第7天-----哈希表
  • Istio实战教程:Service Mesh部署与流量管理
  • AutoMQ 与蚂蚁数科达成战略合作
  • 机器学习——随机森林
  • WEB安全-文件上传漏洞
  • android 使用系统工具bootchart统计开机时长
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • JavaScript DOM 10 - 滚动
  • mysql中InnoDB引擎中页的概念
  • oschina
  • Python_网络编程
  • Python十分钟制作属于你自己的个性logo
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • puppet连载22:define用法
  • #QT(一种朴素的计算器实现方法)
  • #vue3 实现前端下载excel文件模板功能
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (done) 两个矩阵 “相似” 是什么意思?
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二) 初入MySQL 【数据库管理】
  • (二十三)Flask之高频面试点
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转载)OpenStack Hacker养成指南
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .dwp和.webpart的区别
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core中的去虚
  • .NET Framework .NET Core与 .NET 的区别
  • .NET4.0并行计算技术基础(1)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET中winform传递参数至Url并获得返回值或文件
  • @取消转义
  • [ 第一章] JavaScript 简史
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [000-01-022].第06节:RabbitMQ中的交换机介绍
  • [APIO2015]巴厘岛的雕塑
  • [BZOJ3757] 苹果树
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++][opencv]基于opencv实现photoshop算法图像剪切
  • [C语言]——分支和循环(4)
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)
  • [hdu 3065] 病毒侵袭持续中 [AC自动机] [病毒特征码匹配]