编译GDB --enable-targets=all --enable-64-bit-bfd

本文深入解析如何使用GDB进行编译,包括获取最新版本、基本编译流程、支持其他体系结构的方法及交叉编译技巧。特别强调了如何在本地编译出能在不同平台使用的GDB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次尝试才用一种新的BLOG发帖 大家都可以把要发到BLOG的文章投递到MAILLIST 然后大家REVIEW 等REVIEW的差不离了 再发到BLOG上
欢迎大家帮忙review

编译GDB
teawater@hellogcc


1. 取得源码
通常人们选择release的版本,可以直接到http://www.gnu.org/software/gdb/download/,这里介绍了各种下载地址,建议下载最新版本。;

当然我个人更推荐使用trunk,BUG这里最早修复,新功能这里最早会有,只是很偶尔会有编译出错的情况(今年我好像还没碰见过),大约过个1天也会有人修复。唯一的缺点是你需要经常更新你的GDB代码并编译安装他们,当然这其实也花不了多少时间。
取得trunk也可以通过下载的方式,ftp://sourceware.org/pub/gdb/snapshots/current/gdb.tar.bz2就是当前GDB的源码。;
当然如果经常更新的话,每次都下载十几M的源码包肯定比较麻烦,这时候最好就能用到版本控制工具来取得代码。GDB官方的版本控制使用的CVS,你可以用:
cvs -z9 -d :pserver:anoncvs@xxxxxxxxxxxxxx:/cvs/src co gdb
取得最新的GDB代码,而在取得源码用目录中用:
cvs update
就可以更新源码。
GDB也提供了GIT镜像:
git clone git://sourceware.org/git/gdb.git
取得最新的GDB代码,而在取得源码用目录中用:
git pull
就可以更新源码。


2.基本编译
编译之前请安装texinfo,libncurses5-dev, m4, flex 和 bison这5个包。
最基本的GDB编译非常简单,和编译大部分软件一样。
创建一个用来编译GDB的目录:
mkdir bgdb
进入这个目录:
cd bgdb
config,其中../gdb/是GDB源码的目录:
../gdb/configure
然后就是编译:
make
编译后安装:
make install
其中比较关键的地方就是config,其决定了后面编译出什么样的GDB。

如果想设置编译好的GDB到一个指定目录,可以用:
../gdb/configure  --prefix=$HOME
使用这个configure,可以让GDB安装到当前用户的home目录。

也可以在编译的时候指定CFLAGS,可以用:
../gdb/configure CFLAGS=-g
使用这个configure,编译出的GDB没有打开O2选项。


3.编译支持其他体系结构的GDB
前面介绍的config方式都是编译当前体系结构的,有时候我们需要在本机(X86)上跑一个支持别的体系结构的GDB,这样可以分析那个平台的二进制文件,CORE文件以及对那个平台的的程序进行远程调试。可以这样用:
../gdb/configure --target=amd64-linux
这样编译出的GDB就可以支持AMD64的GDB,编译安装的时候,GDB的执行文件会被命名为amd64-linux-gdb。

但是这样编译会有个小问题,如果需要使用多个体系结构的GDB,则需要每个平台都编译一个GDB,这有点麻烦,所以我比较喜欢使用的是另一种方法配置:
../gdb/configure --enable-targets=all --enable-64-bit-bfd
这样的GDB可以直接支持了全部全部他可以支持的体系结构和文件结构。
其中--enable-targets=all是让GDB打开对所有体系结构支持。
而--enable-64-bit-bfd是设置bfd为64位模式,这样才能支持64位的二进制文件比如说amd64,不过比较新的bfd中,当设置的target是64位或者打开--enable-targets=all的时候,不需要设置会自动打开这个选项,不过保险起见还是打开。
这样编译出的GDB就能支持GDB支持的全部体系结构了。
当然用起来有个问题就是,因为支持的体系结构太多,可能有一些二进制文件会同时符合若干种格式,打开这类文件的时候GDB会显示:
"xxx": not in executable format: File format is ambiguous.
Matching formats: elf32-bigmips elf32-bigmips-vxworks elf32-tradbigmips.
Use "set gnutarget format-name" to specify the format.
这时你就可以根据提示,用set gnutarget format-name从列表中选择正确的格式,然后再用file命令打开这个文件,就可以了。


4.交叉编译
如果想在本地编译一个GDB而要在其他体系结构的平台上下使用,首先需要本地交叉编译环境可用,可以编译出可以在目标平台上运行的可执行文件,然后:
../src/configure --host=mips64-linux --enable-64-bit-bfd
CC=mips64-linux-gcc LD=mips64-linux-ld AR=mips64-linux-ar
这样GDB就能编译出一个可以在mips64-linux上使用的GDB。


5.cvs update -d
前面提过更新CVS目录,要使用cvs update,而cvs update
-d是不建议使用的命令,因为当增加-d选项的时候,cvs会把源码仓库中所有文件都取回来,完成后src目录中不光有原来的目录,还增加了binutils,tk,
ld 等一大堆其他软件的目录。
如果你希望同时使用sourceware里面这些软件的最新版本,你可以使用这个源码树,如果你不想使用这样的源码树,则请直接看下一节。
我对这个目录建议的配置是:
../gdb/configure --disable-sid --disable-rda --disable-gdbtk
--enable-targets=all --enable-64-bit-bfd
其中--enable-targets=all --enable-64-bit-bfd上一节已经介绍过,不再介绍。
--disable-sid --disable-rda禁止了2个不太常用且编译比较慢的软件。
--disable-gdbtk禁止了GDB图形扩展insight的编译,其实这个软件还是相当好用的,这个图形扩展可以同时打开命令行,看源码的时候还能随时切换成汇编。但其有一个问题是跟GDB源码的联系其实非常紧密,一旦GDB一些源码作了更新,其的编译就会受到影响,再加上维护者不多,所以一旦编译不过就需要等上几天,这种情况一年能碰上几次,几率也不算很高。当然如果不介意的话,可以在config的时候去掉--disable-gdbtk,并安装包libx11-dev,编译如果发现问题可以报到邮件列表insight@xxxxxxxxxxxxxx,这样开发者可以更快的修复问题。


6.写在最后
前面介绍过的config参数可以同时使用,大家可根据需要灵活组合。
标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
MathorCup高校数学建模挑战赛是一项旨在提升学生数学应用、创新和团队协作能力的年度竞赛。参赛团队需在规定时间内解决实际问题,运用数学建模方法进行分析并提出解决方案。2021年第十一届比赛的D题就是一个典型例子。 MATLAB是解决这类问题的常用工具。它是一款强大的数值计算和编程软件,广泛应用于数学建模、数据分析和科学计算。MATLAB拥有丰富的函数库,涵盖线性代数、统计分析、优化算法、信号处理等多种数学操作,方便参赛者构建模型和实现算法。 在提供的文件列表中,有几个关键文件: d题论文(1).docx:这可能是参赛队伍对D题的解答报告,详细记录了他们对问题的理解、建模过程、求解方法和结果分析。 D_1.m、ratio.m、importfile.m、Untitled.m、changf.m、pailiezuhe.m、huitu.m:这些是MATLAB源代码文件,每个文件可能对应一个特定的计算步骤或功能。例如: D_1.m 可能是主要的建模代码; ratio.m 可能用于计算某种比例或比率; importfile.m 可能用于导入数据; Untitled.m 可能是未命名的脚本,包含临时或测试代码; changf.m 可能涉及函数变换; pailiezuhe.m 可能与矩阵的排列组合相关; huitu.m 可能用于绘制回路图或流程图。 matlab111.mat:这是一个MATLAB数据文件,存储了变量或矩阵等数据,可能用于后续计算或分析。 D-date.mat:这个文件可能包含与D题相关的特定日期数据,或是模拟过程中用到的时间序列数据。 从这些文件可以推测,参赛队伍可能利用MATLAB完成了数据预处理、模型构建、数值模拟和结果可视化等一系列工作。然而,具体的建模细节和解决方案需要查看解压后的文件内容才能深入了解。 在数学建模过程中,团队需深入理解问题本质,选择合适的数学模
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值