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

2023-11-11

这次尝试才用一种新的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参数可以同时使用,大家可根据需要灵活组合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译GDB --enable-targets=all --enable-64-bit-bfd 的相关文章

  • linux下的shell 快捷键

    linux下的shell 快捷键 2011 05 24 14 06 51 转载 标签 杂谈 分类 linux Ctrl p重复上一次命令 Ctrl a跳到第一个字符前 Ctrl x同上但再按一次会从新回到原位置 Ctrl b前移一个字符不删
  • 深度探索C++对象模型(20)——函数语义学(4)——多继承第二基类对虚函数支持的影响、虚继承下的虚函数

    1 多继承第二基类对虚函数支持的影响 子类继承了几个父类 子类就有几个虚函数表 this指针调整的目的就是让对象指针正确的指向对象首地址 从而能正确的调用对象的成员函数或者说正确确定数据成员的存储位置 多重继承下 有几种情况 第二个或者后续
  • ubuntu设置共享文件夹与linux进行文件共享

    1 打开虚拟机设置 选项 共享文件夹 添加一个文件夹路径 这个路径是windows下 的路径 比如说E盘 可以在E盘里面新建一个 share文件夹 然后确定 2 在Linux目录下 cd mnt hgfs E share 就可以看到里面的文
  • NoSQL的概念

    NoSQL概述 发展历程 1 单机MySQL的年代 网站发展之初 网站的访问量基本不会太大 单个数据库完全足够 那个时候基本都是静态网页HTML服务器没有压力 数据量如果太大 一个机器放不下了 B Tree 索引也放不下了 访问量太大 一个
  • yum安装软件时报错libmysqlclient.so.18()(64bit)

    环境 CentOS 7 4 使用阿里yum的网络源 问题 使用yum安装软件时报错 2 postfix 2 10 1 6 el7 x86 64 has missing requires of libmysqlclient so 18 64b
  • PyQt5中为QTextEdit的某些字符单独设置大小和颜色

    QTextEdit支持富文本 因此您可以将css样式与html一起用于QTextEdit中的文本 可以使用不同的样式附加不同的富文本 为方便起见 只需创建一些格式化文本 并将相应的文本传递给python string的format方法来创建
  • [Linux安装软件详解系列]01 安装MySQL8.0

    目录 1 检查有没有安装MySQL 2 安装MySQL8 0 1 下载 rpm文件 2 上传rpm文件到服务器 3 安装rpm文件 4 查看安装好的包 5 安装MySQL 5 启动MySQL 3 本地登录 1 查看默认密码 2 本地登录My
  • 这注定是一场独一无二的旅行——周年纪念日 [form 2022 to 2023]

    啊哈 竟然已经一周年了 还记得自己写了两三篇博客以后 就停写了很久 很久 总是因为各种各样的事情拖沓 直到有一天CSDN轻轻敲醒了我沉睡的心灵 忽然意识到自己好久没写了 也让我去想自己的初衷 为何而写 Why 一直觉得内容创作是一个很酷的事
  • 华为OD机试 Python 查找人名

    描述 有一串由逗号分隔的人名 每个人名可能由一个或多个单词组成 请你设计一个方法 根据指定的前缀串 找出与前缀匹配的人名 前缀串的构造是由人名中每个单词的第一个字母组合而成 输入 一串用逗号分隔的人名 一个前缀串 输出 匹配前缀串的所有人名
  • 吴恩达机器学习之路---logistic regression

    logistic regression 一 Logistic 回归 利用matlib实现 基础版 1 logistic regression数学基础 1 1 此示例为二元分类 二元分类的最终预测结果h为 0 1 为获得此效果 使用sigmo
  • 02-----带宽分析-----码流、分辨率、帧率的概念及如何计算视频带宽

    相关文章 01 带宽分析 下载nmon分析软件 一 码流 分辨率 帧率的概念 1 码流 码流 Data Rate 是指视频文件在单位时间内使用的数据流量 也叫码率或码流率 是视频编码中画面质量控制中最重要的部分 一般我们用的单位是Kb s或
  • Java线程学习实例——采用同步锁,互斥锁与同步锁的区别,synchronized的使用方法

    栗子来源 https blog csdn net wenzhi20102321 article details 52524545 首先对java中同步锁与互斥锁进行区分 主要来源于知乎中的大佬总结如下 1 锁的概念 锁的目的就是避免多个线程
  • FTP服务器的文件模式属于,FTP服务器的文件模式属于

    FTP服务器的文件模式属于 内容精选 换一换 在SAP HANA系统中 Shared卷和Backup卷由SFS Turbo提供时 需要创建一个SFS Turbo 提供共享路径给SAP HANA节点 表1列出了弹性文件服务的常用功能 在使用弹
  • uc浏览器解析视频源码,不废话,直接源码

    package cn rs blog service jiexi import com jfinal kit HttpKit import org apache http client CookieStore import org apac
  • 计算时间复杂度--(简单版)

    步骤 1 找到执行次数最多的语句 2 语句执行语句的数量级 3 用O表示结果 计算时间复杂度的3个出发点 掌握这三个出发点 那么一向搞不懂的时间复杂度就可以迎刃而解啦 然后 1 用常数1取代运行时间中的所有加法常数 2 在修改后的运行次数函
  • Spark(火花)快速、通用的大数据处理引擎框架

    一 什么是Spark 火花 是一种快速 通用处理大数据分析的框架引擎 二 Spark的四大特性 1 快速 Spark内存上采用DAG 有向无环图 执行引擎非循环数据流和内存计算支持 内存上比MapReduce快速100倍 磁盘上快10倍左右
  • android surfaceflinger 老罗,「Android」SurfaceFlinger分析

    本篇针对surfaceFlinger模块进行分析 目录如下 1 SurfaceFlinger功能 1 1 BufferQueue原理 native libs gui模块 1 2 layer显示内存分配 native libs ui模块 1
  • 使用org.apache.tools.zip包操作文件

    import java io import org apache tools zip import java util Enumeration 功能 zip压缩 解压 支持中文文件名 说明 本程序通过使用Apache Ant里提供的zip工
  • pytorch中的torchvision.transforms模块详解

    torchvision transforms torchvision transforms是pytorch中的图像预处理包 包含了很多种对图像数据进行变换的函数 这些都是在我们进行图像数据读入步骤中必不可少的 data transforms
  • 最大最小爬山算法的一些总结

    据说MMHC是现行的比较成功的一种混合贝叶斯结构学习算法 其主要思想是 先建立一个贝叶斯网络的骨架 再通过贪心算法确定最终结构 那么要搞懂的是以下 1 框架是如何建立的 2 贪心算法是怎么运行的 3 最大最小体现在哪里 4 为什么会优于一般

随机推荐

  • Linux 关闭无用端口

    Linux 关闭无用端口 关闭系统不必要的端口 增强系统安全 此处以关闭111端口为例进行说明 查看本机正在监听的端口 netstat tlnup 查看正在监听的111端口 由哪个服务使用 cat etc services grep w 1
  • Adobe XD for Mac v35.2.12 界面设计和原型交互工具

    Adobe XD for Mac 是一款优秀的界面设计和原型交互工具 用户可以进行移动应用和网页设计与原型制作 同时它也是唯一一款结合设计与建立原型功能 并同时提供工业级性能的跨平台设计产品 设计师使用Adobe XD可以更高效准确的完成静
  • 继承中析构和构造的调用原则

    继承与组合混搭情况下 构造和析构调用原则 先说结论 原则 先构造父类 再构造成员变量 最后构造自己 先析构自己 在析构成员变量 最后析构父类 注 先构造的对象 后释放 class my 创建一个成员类 public int a my int
  • .Net WebAPI JWT身份验证

    一 开发环境 VS2017 enterprise win10 Pro 64 net 4 6 2 二 开发过程 1 使用VS2017 创建 netframework项目 选择WebApi 2 从Nuget包中搜索并安装JWT 3 在Model
  • 动态路由-BGP的基础配置

    一 给每个路由器配置ip地址 AR6 1 1 添加ip地址 interface GigabitEthernet0 0 0 ip address 1 1 1 1 255 255 255 0 2 配置BGP对等体 bgp 100 配置bgp的A
  • 使用PyQt(Python+Qt)+moviepy开发的视频截取、音视频分离、MP4转GIF动图工具免费下载分享

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 在因博文素材需要将软件操作制作成动画时 发现网上相关绿色使用工具都需要注册 否则动态上就会打上各种LOGO 无
  • C++ 类成员指针

    1 成员指针简介 成员指针是C 引入的一种新机制 它的申明方式和使用方式都与一般的指针有所不同 成员指针分为成员函数指针和数据成员指针 2 成员函数指针 在事件驱动和多线程应用中被广泛用于调用回调函数 在多线程应用中 每个线程都通过指向成员
  • IIS错误页面隐藏版本信息 - Web.Config customErrors配置

    目录 背景 分析暴露原因 解决办法 扩展学习customErrors使用方法 customErrors元素配置结构 元素属性 Mod 属性选项 示例 参考文章 背景 项目现按照国网的要求 测试后发现系统错误页面存在服务器版本号泄露 不允许部
  • Java Servlet的主要功能和作用是什么?

    Servlet 通过创建一个框架来扩展服务器的能力 以提供在 Web 上进行请求和响应服务 当客户机发送请求至服务器时 服务器可以将请求信息发送给 Servlet 并让 Servlet 建立起服务器返回给客户机的响应 当启动 Web 服务器
  • Kali Linux 2020.1修改Root用户密码

    背景信息 多年以来 Kali从BackTrack继承了默认的root用户策略 作为对Kali工具和策略的评估的一部分 因此Kali 决定对此进行更改 并将Kali移至 传统默认非根用户 模型 那如果我们因某些情况想开启Root用户这应该如何
  • facebook stetho Android调试工具

    什么是Stetho 官网简介 Stetho is a debug bridge for Android applications enabling the powerful Chrome Developer Tools and much m
  • 如何利用matlab神经网络进行水量预测

    数据收集 百度搜索EPS数据库登陆 我们选择进入城市数据库 我们的目的是要进行某年水量预测 我们的目的是知道了某一年的土地 人口等信息 就可以预测出该年的用水量 因此我们需要搜集一些信息用来训练 可以多选几年如2003 2017 然后点击下
  • 13 集成测试之自顶向下集成测试方法

    自顶向下集成测试方法 前言 深度优先集成方法 宽度优先集成方法 总结 前言 自顶向下集成方法可以采取深度优先或者宽度优先策略 深度优先集成方法 深度优先从最左边分支自上而下开始测试并向上结合 测试完一个分支后再测试下一个分支 如图测试顺序为
  • 渗压计工作原理及选型

    渗压计适合埋设在水工建筑物和基岩内 或安装在测压管 钻孔 堤坝 管道或压力容器中 以测量孔隙水压力或液位 主要部件均采用特殊钢材制造 适合在各种恶劣环境中使用 一般型号后缀为标准型 可以为低量程型和为通气 差压 型 另可根据客户要求提供高压
  • Hypertable 简介 一个 C++ 的Bigtable开源实现

    1 Introduction 随着互联网技术的发展 尤其是云计算平台的出现 分布式应用程序需要处理大量的数据 PB级 在一个或多个云计算平台中 成千上万的计算主机 如何保证数据的有效存储和组织 为应用提供高效和可靠的访问接口 并且保持良好的
  • scss中的样式复用:继承;占位符;混合宏

    文章目录 一 使用 extend实现样式复用 继承 二 使用占位符实现样式复用 占位 三 使用混合宏实现样式复用 混合宏 四 参数运算符 待更新 类名复用 未验证 待更新 react中使用sass 了解css in js解决方案 在reac
  • 【Pandas 数据查找函数 详解】

    本文介绍了Pandas数据查找常用函数 掌握了这些函数的应用 让你在数据处理时 手到擒来 游刃有余 目录 一 查找数据位置 s str find 和s str index 函数 二 数据的查找判断 1 判断开头或结尾是否是指定字符串s st
  • 保姆级Obsidian学习教程【超完整,小白必备】

    前言 本篇文章学习视频来源 沙牛obsidian优质课程 学 习 软 件 obsidian 课 程 对 应 资 源 云盘资源 说 明 Obsidian是基于Markdown文件的本地知识管理软件 并且开发者承诺Obsidian对于个人使用者
  • java integer long 转换_long(Long)与int(Integer)之间的转换

    1 将long型转化为int型 这里的long型是基础类型 long a 10 int b int a 2 将Long型转换为int 型的 这里的Long型是包装类型 Long a 10 int b a intValue 3 将Long型转
  • 编译GDB --enable-targets=all --enable-64-bit-bfd

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