gnu 相关工具概述

31
©2007 ZTE corporation GNU GNU 相相相相相相 相相相相相相 相相相相相相 相相

Upload: quito

Post on 16-Mar-2016

78 views

Category:

Documents


6 download

DESCRIPTION

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

TRANSCRIPT

Page 1: GNU 相关工具概述

©2007 ZTE corporation

GNUGNU 相关工具概述相关工具概述成研所操作系统团队

Page 2: GNU 相关工具概述

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

Page 3: GNU 相关工具概述

GNU 介绍 FSF(Free Software Foundation)

GNU 计划的主要发起者 . FSF 主要依靠个体的开发人员及团体支持,并与个别发展基金及集团有合作 主要致力于自由的开发、使用、学习、拷贝、分发、修改计算机软件,并维护自由软件用户的权益。

GNU 计划FSF 于 1984 年开始研发的,与 Unix 相似的操作系统及其支持工具 ( 包括 GCC 、 GDB..) ,纯自由软件

Page 4: GNU 相关工具概述

GPL

GPL=General Public License( 通用公共授权 ) 条款目的

倡导软件的共享与修改自由 吸引更多开发人员投入自由软件的海洋

条款主要内容 共 13 条,详情请看 www.gnu.org

我们如何使用? 所有 FSF 发布的软件,开发人员在使用、修改、发布、复制过程中需遵循 GPL

Page 5: GNU 相关工具概述

开发的全过程

检查语法

编译编译编译

.c

建依赖关系链接

.o 、 .a 、 .so .out 调试

排错

代码出错

编辑编辑编辑

编写代码

Page 6: GNU 相关工具概述

Linux 开发相关工具 GCC

编译工具链,包括预处理、编译、汇编、链接 Make

工程管理器,其实是由一套 Makefile 定义规则 GDB

用户态调试器,支持常用的运行、打断点、单步调试、查看功能 Binutils

2 进制开发、管理工具套件

Page 7: GNU 相关工具概述

使用 GNU 工具开发示例 编译

gcc -o hello.o –c hello.c 链接

gcc h1.h hello.o –o hello.out 调试

gdb run hello.outbreak 61continue info registers

Page 8: GNU 相关工具概述

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

Page 9: GNU 相关工具概述

C 编译器 GCC

GCC 是一套编译工具链的接口 预处理器 CPPC 编译器 汇编器 AS 链接器 LD

一条典型的 GCC 命令:gcc –o hello.o –c hello.c

编译 hello.c 并生成目标文件 hello.o 每个选项对应一个工具,由 gcc 做为命令接口

Page 10: GNU 相关工具概述

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

Page 11: GNU 相关工具概述

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

Page 12: GNU 相关工具概述

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

Page 13: GNU 相关工具概述

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

Page 14: GNU 相关工具概述

使用 GDB

直接打 gdb 进入 GDB 命令提示符 或者 gdb – 参数

-symbols 从指定文件提取符号表 -se 从指定文件中读取符号表信息,并把他用在可执行文件中 -directory 添加源文件搜索路径,默认为环境变量 PATH 中的路径 -core 同时调试程序和 core 文件 ( 程序非法执行后 core dump 生成文件)

Page 15: GNU 相关工具概述

GDB 主要功能 进入后打 help command 查看帮助 程序运行

run 运行程序 set args / show args 设置 / 查看运行参数 path / show path 设置 / 查看程序运行路径 set environment 设置环境变量

Page 16: GNU 相关工具概述

GDB 主要功能 停止及恢复

断点 ( 行 / 函数 )• break 指定行或函数• break …if 设置断点条件,如 if i=5• info break 查看所有断点

观察点 ( 表达式 )• watch 设置观察点,当表达式值发生改变时停住• rwatch 当表达式读取时停住• awatch 当表达式读 / 写时停住• info watchpoints 查看所有观察点

捕捉点 ( 事件 )• catch 当指定事件发生时停住

Page 17: GNU 相关工具概述

GDB 主要功能 停止及恢复

停止点操作• clear 清除所有停止点• delete 删除指定停止点• disable/enable 临时关闭 / 开启停止点

恢复• continue 恢复程序运行• step 单步跳入• next 单步跳过• finish 单步返回

Page 18: GNU 相关工具概述

GDB 主要功能 查看信息

info stack 查看栈信息 info registers 查看寄存器print expression 查看表达式print /fmt [var] 查看变量x /fmt [adress] 查看内存

Page 19: GNU 相关工具概述

GDB 主要功能 改变执行

print var=value 修改变量值 jump file:line 跳到 n 行执行 return 强制函数返回call 强制调用函数

Page 20: GNU 相关工具概述

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

Page 21: GNU 相关工具概述

为什么使用 Make

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

Page 22: GNU 相关工具概述

Make 常用命令选项 大多数时候,我们只需要打命令 Make 目标名 除此之外, Make 提供了丰富的命令行选项

-n 打印 make 动作而不执行 -f file 指定某个文件作为 makefile -o *.h 忽略某个头文件 -t 更新目标文件设置日期 -C dir 切换工作目录到 dir 下执行 Make -d Make 过程输出所有调试信息 -i 忽略所有规则命令运行错误 -s 执行中不显示命令 - r 取消隐式规则

Page 23: GNU 相关工具概述

Makefile 浅析 一个例子

hello.o : hello.c hello.h  GCC –c hello.c –o hello.o其实就是:目标文件:依赖文件

命令 ( 前面加 TAB 表示命令 )规则是:依赖文件 -> 命令 -> 目标文件

Page 24: GNU 相关工具概述

Makefile 浅析 复杂一点的例子:

CC=GCCPROGS=howdy helloCFLASS=-Wall

all : $ (PROGS)howdy : howdy.chello : hello.c

$ (CC) $ (CFLASS) hello.c –o hello

clean:rm -f *.orm -f *.sorm -f *.arm –f $ (PROGS)

变量定义

使用变量

伪目标

Page 25: GNU 相关工具概述

makefile 规则 一条语句就是一条规则 为了简化编写衍生的两种规则

模式规则• 使用模式字符“%”来匹配目标文件,从而衍生出一系列规则,如多目标、万用规则、自动化变量。使用模式规则时,目标文件匹配后得到“茎”,依赖根据“茎”产生依赖文件。

隐式规则• 一系列Make 自动将 .c 文件生成 .o 文件的默认规则,除非加上 -r 选项,否则将默认使用。• 隐式规则中使用隐含变量,如 .c 源文件的隐式规则是:

$(CC) –c $(CFLAGS)$(CPPFLAGS)

Page 26: GNU 相关工具概述

Make 如何解析 makefile

第一阶段: 读取所有 makefile 文件,所有变量、模式规则和隐式规则。并建立所有目标和依赖之间的依赖关系表。

第二阶段根据目标依赖关系表确定哪些目标需要更新,并使用对应规则重建这些目标。

Page 27: GNU 相关工具概述

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

Page 28: GNU 相关工具概述

Binutils 介绍 什么是 Binutils

Binutils 提供了一系列用来创建、管理和维护二进制目标文件的工具程序。事实上,前面讲 GCC 时介绍的汇编工具 AS 和链接工具 LD都是 Binutils 的组件之一。 Binutils 和 GCC 的关系

通常, binutils 与 gcc 是紧密集成的,没有 binutils的话, gcc 是不能正常工作的。

Page 29: GNU 相关工具概述

Binutils 二进制工具 ar

静态库文件 .a专用工具,创建、查看、修改 objcopy

将代码从 elf 文件提取,形成机器码文件 .bin objdump

反汇编查看目标文件 .o readelf

查看 .elf类型目标文件内容

Page 30: GNU 相关工具概述

Binutils 二进制工具 nm

列出 .o 文件中的符号 ranlib

在归档文件 .a 中产生索引,此索引对 .a 中所有成员的符号进行列表。 size

查看 .o 文件内部各字段大小 strings

打印某文件中的可打印字符串,主要用于判断非字符文件中可打印部分

Page 31: GNU 相关工具概述

©2007 ZTE corporation