1 / 31

GNU 相关工具概述

GNU 相关工具概述. 成研所操作系统团队. GNU 工具介绍 GCC 编译工具链 调试工具 GDB Make 工程管理器 Binutils 二进制工具. 目录. GNU 介绍. FSF(Free Software Foundation) GNU 计划 的主要发起者 . FSF 主要依靠个体的开发人员及团体支持,并与个别发展基金及集团有合作 主要致力于 自由 的开发、使用、学习、拷贝、分发、修改计算机软件,并维护自由软件用户的权益。 GNU 计划

quito
Télécharger la présentation

GNU 相关工具概述

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GNU相关工具概述 成研所操作系统团队

  2. GNU工具介绍 GCC编译工具链 调试工具GDB Make工程管理器 Binutils二进制工具 目录

  3. GNU介绍 • FSF(Free Software Foundation) • GNU计划的主要发起者. FSF主要依靠个体的开发人员及团体支持,并与个别发展基金及集团有合作 • 主要致力于自由的开发、使用、学习、拷贝、分发、修改计算机软件,并维护自由软件用户的权益。 • GNU计划 • FSF于1984年开始研发的,与Unix相似的操作系统及其支持工具(包括GCC、GDB..),纯自由软件

  4. GPL • GPL=General Public License(通用公共授权) • 条款目的 • 倡导软件的共享与修改自由 • 吸引更多开发人员投入自由软件的海洋 • 条款主要内容 • 共13条,详情请看www.gnu.org • 我们如何使用? • 所有FSF发布的软件,开发人员在使用、修改、发布、复制过程中需遵循GPL

  5. 代码出错 .c .o、.a、.so 编辑 编译 .out 编辑 编译 链接 调试 编辑 编译 建依赖关系 排错 编写代码 检查语法 开发的全过程

  6. Linux开发相关工具 • GCC • 编译工具链,包括预处理、编译、汇编、链接 • Make • 工程管理器,其实是由一套Makefile定义规则 • GDB • 用户态调试器,支持常用的运行、打断点、单步调试、查看功能 • Binutils • 2进制开发、管理工具套件

  7. 使用GNU工具开发示例 • 编译 • gcc -o hello.o –c hello.c • 链接 • gcc h1.h hello.o –o hello.out • 调试 • gdb • run hello.out • break 61 • continue • info registers

  8. GNU工具介绍 GCC编译工具链 调试工具GDB Make工程管理器 Binutils二进制工具 目录

  9. C编译器GCC • GCC是一套编译工具链的接口 • 预处理器CPP • C编译器 • 汇编器AS • 链接器LD • 一条典型的GCC命令: gcc –o hello.o –c hello.c • 编译hello.c并生成目标文件hello.o • 每个选项对应一个工具,由gcc做为命令接口

  10. GCC常用命令行选项 • -o指定生成的文件名,默认为a.XXX • -E只做预处理,生成.i文件 • -S只做预处理和编译,不汇编,生成.S文件 • -c只编译,不进行链接,生成.o文件 • 不加参数,编译、链接生成可执行文件.out

  11. GCC常用命令行选项 • -I指定链接时头文件搜索目录 • -L指定链接时函数库搜索目录 • -O1/O2/O3代码优化,自动提升编译出的可执行文件执行效率,但编译速度慢,release版常用 • -g编译时创建调试信息,调试前必须使用 • -Wall产生全部警告信息

  12. GCC对C语言的扩展 • GCC有一套扩展过的C,由GCC唯一识别 • C扩展对优化、目标代码布局、更安全的检查等方面提供了很强的支持 • Linux内核代码使用了大量的GCC扩展C,因此GCC唯一能编译Linux内核。

  13. GNU工具介绍 GCC编译工具链 调试工具GDB Make工程管理器 Binutils二进制工具 目录

  14. 使用GDB • 直接打gdb进入GDB命令提示符 • 或者gdb –参数 • -symbols从指定文件提取符号表 • -se从指定文件中读取符号表信息,并把他用在可执行文件中 • -directory添加源文件搜索路径,默认为环境变量PATH中的路径 • -core同时调试程序和core文件(程序非法执行后core dump生成文件)

  15. GDB主要功能 • 进入后打help command查看帮助 • 程序运行 • run运行程序 • set args / show args设置/查看运行参数 • path /show path设置/查看程序运行路径 • set environment设置环境变量

  16. GDB主要功能 • 停止及恢复 • 断点(行/函数) • break 指定行或函数 • break …if设置断点条件,如if i=5 • info break查看所有断点 • 观察点(表达式) • watch 设置观察点,当表达式值发生改变时停住 • rwatch 当表达式读取时停住 • awatch 当表达式读/写时停住 • info watchpoints查看所有观察点 • 捕捉点(事件) • catch 当指定事件发生时停住

  17. GDB主要功能 • 停止及恢复 • 停止点操作 • clear 清除所有停止点 • delete 删除指定停止点 • disable/enable临时关闭/开启停止点 • 恢复 • continue 恢复程序运行 • step 单步跳入 • next 单步跳过 • finish 单步返回

  18. GDB主要功能 • 查看信息 • info stack查看栈信息 • info registers 查看寄存器 • print expression查看表达式 • print /fmt [var]查看变量 • x /fmt [adress]查看内存

  19. GDB主要功能 • 改变执行 • print var=value修改变量值 • jump file:line跳到n行执行 • return 强制函数返回 • call 强制调用函数

  20. GNU工具介绍 GCC编译工具链 调试工具GDB Make工程管理器 Binutils二进制工具 目录

  21. 为什么使用Make • 一个没有工程管理器的大型工程,犹如一盘散沙 • 如果按照1-3章所讲,我们需要为每一个文件修改,重新编译所有文件。 • 如果说Make是一次联赛的组织者,Makefile就是赛程表,登记了所有的选手,以及他们的比赛顺序。 • 一个大型工程的所有文件编译、链接,只需要一个Make命令

  22. Make常用命令选项 • 大多数时候,我们只需要打命令Make 目标名 • 除此之外,Make提供了丰富的命令行选项 • -n 打印make动作而不执行 • -f file指定某个文件作为makefile • -o *.h 忽略某个头文件 • -t 更新目标文件设置日期 • -C dir 切换工作目录到dir下执行Make • -d Make过程输出所有调试信息 • -i 忽略所有规则命令运行错误 • -s 执行中不显示命令 • - r取消隐式规则

  23. Makefile浅析 • 一个例子 hello.o : hello.c hello.h   GCC –c hello.c –o hello.o 其实就是: 目标文件:依赖文件 命令(前面加TAB表示命令) 规则是: 依赖文件->命令->目标文件

  24. 变量定义 使用变量 伪目标 Makefile浅析 • 复杂一点的例子: CC=GCC PROGS=howdy hello CFLASS=-Wall all : $ (PROGS) howdy : howdy.c hello : hello.c $ (CC) $ (CFLASS) hello.c –o hello clean: rm -f *.o rm -f *.so rm -f *.a rm –f $ (PROGS)

  25. makefile规则 • 一条语句就是一条规则 • 为了简化编写衍生的两种规则 • 模式规则 • 使用模式字符“%”来匹配目标文件,从而衍生出一系列规则,如多目标、万用规则、自动化变量。使用模式规则时,目标文件匹配后得到“茎”,依赖根据“茎”产生依赖文件。 • 隐式规则 • 一系列Make自动将.c文件生成.o文件的默认规则,除非加上-r 选项,否则将默认使用。 • 隐式规则中使用隐含变量,如.c源文件的隐式规则是: $(CC) –c $(CFLAGS)$(CPPFLAGS)

  26. Make如何解析makefile • 第一阶段: • 读取所有makefile文件,所有变量、模式规则和隐式规则。并建立所有目标和依赖之间的依赖关系表。 • 第二阶段 • 根据目标依赖关系表确定哪些目标需要更新,并使用对应规则重建这些目标。

  27. GNU工具介绍 GCC编译工具链 调试工具GDB Make工程管理器 Binutils二进制工具 目录

  28. Binutils介绍 • 什么是Binutils • Binutils提供了一系列用来创建、管理和维护二进制目标文件的工具程序。事实上,前面讲GCC时介绍的汇编工具AS和链接工具LD都是Binutils的组件之一。 • Binutils和GCC的关系 • 通常,binutils与gcc是紧密集成的,没有binutils的话,gcc是不能正常工作的。

  29. Binutils二进制工具 • ar • 静态库文件.a专用工具,创建、查看、修改 • objcopy • 将代码从elf文件提取,形成机器码文件.bin • objdump • 反汇编查看目标文件.o • readelf • 查看.elf类型目标文件内容

  30. Binutils二进制工具 • nm • 列出.o文件中的符号 • ranlib • 在归档文件.a中产生索引,此索引对.a中所有成员的符号进行列表。 • size • 查看.o文件内部各字段大小 • strings • 打印某文件中的可打印字符串,主要用于判断非字符文件中可打印部分

  31. 谢 谢

More Related