开发工具介绍模板.pptx

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2019-10-16
谢谢关注
8
GCC下的工具
cpp — 预处理器 GNU C编译器在编译前自动使用cpp对用户程 序进行预处理
gcc — 符合ISO等标准的C编译器 g++ — 基本符合ISO标准的C++编译器 gcj — GCC的java前端 gnat — GCC的GNU ADA 95前端
gcc –o gcctest gcctest.c
2019-10-16
谢谢关注
22
目标代码执行代码
2019-10-16
谢谢关注
直接生成执行代码
23
gcc的高级选项
-Wall:打开所有的警告信息
2019-10-16
谢谢关注
24
根据警告信息检查源程序
Main函数的返回值为int
在函数的末尾应当返回一个值
开发工具介绍
1
“工欲善其事, 必先利其器”
--《论语》
2
主要内容
GNU Tools简介 GNU Tools交叉开发环境及其安装
3
本地开发 vs 交叉平台开发
本地开发: 一般软件的开发属于本地开发,也就是说开发 软件的系统与运行软件的系统是相同的。
交叉平台开发: 本课程所涉及到的嵌入式系统开发属于交叉平 台开发,也就是说开发软件的系统与运行软件 的系统不同。
v:输出信息
2019-10-16
谢谢关注
将库文件拷贝到/usr/lib目录下
38
库文件使用举例 在代码中使用Add和Minus函数
2019-10-16
谢谢关注
39
在编译时指定库文件
运行结果
指明将libtest.a链接进来
2019-10-16
谢谢关注
40
nm
nm的主要功能是列出目标文件中的符号,这 样程序员就可以定位和分析执行程序和目标文 件中的符号信息和它的属性
4. C++filt解码C++符号名,连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。
5. gprof 显示程序调用段的各种数据。
6. ld 是连接器,它把一些目标和归档文件结合在一 起,重定位数据,并链接符号引用,最终形成一 个可执行文件。通常,建立一个新编译程序的最 后一步就是调用ld。
2. ar 建立、修改、提取归档文件。归档文件是包含多 个文件内容的一个大文件,其结构保证了可以恢复 原始文件内容。
2019-10-16
谢谢关注
30
3. as 是GNU汇编器,主要用来编译GNU C编译器 gcc输出的汇编文件,他将汇编代码转换成二进制 代码,并存放到一个object文件中,该目标文件将 由连接器ld连接
2019-10-16
谢谢关注
46
文件格式
Flat elf格式有很大的文件头,flat文件对文件头和 一些段信息做了简化 uClinux系统使用flat可执行文件格式
SREC MOTOROLA S-Recoder格式(S记录格式文 件)
等等
2019-10-16
谢谢关注
47
objdump
2019-10-16
谢谢关注
16
预编译 行数 单词数 字节数
2019-10-16
谢谢关注
17
gcc的工作过程(3)
预处理文件汇编代码 1)使用-x参数说明根据指定的步骤进行工作, cpp-output指明从预处理得到的文件开始编译 2)使用-S说明生成汇编代码后停止工作
gcc –x cpp-output –S –o gcctest.s gcctest.cpp
GCC Binutils—辅助GCC的主要软件 Gdb make cvs
2019-10-16
谢谢关注
7
GCC
很多人认为GCC只是一个C编译器, 其实GCC = GNU Compiler Collection
目前,GCC可以支持多种高级语言,如
C、C++ ADA Object C JAVA Fortran PASCAL
也可以直接编译到汇编代码
gcc –S gcctest.c
2019-10-16
谢谢关注
18
预处理文件汇编代码
直接编译到汇编代码
2019-10-16
谢谢关注
19
gcc的工作过程(4)
汇编代码目标代码
gcc –x assembler –c gcctest.s
直接编译成目标代码
gcc –c gcctest.c
2019-10-16
谢谢关注
34
binutils开发工具使用举例
ar nm Objcopy Objdump readelf
2019-10-16
谢谢关注
35
ar
ar用于建立、修改、提取归档文件(archive), 一个归档文件,是包含多个被包含文件的单个 文件(也可以认为归档文件是一个库文件)。
显示一个或多个目标文件的信息,由其选项来 控制显示哪些信息。一般来说,objdump只对 那些要编写编译工具的程序员有帮助,但是我 们通过这个工具可以方便的查看执行文件或者 库文件的信息
2019-10-16
谢谢关注
48
Objdump使用举例(1)
-f选项:显示文件头中的内容
2019-10-16
2019-10-16
谢谢关注
9
GNU Tools—gcc
gcc是一个强大的工具集合,它包含了预处理 器,编译器,汇编器,链接器等组件。它会在 需要的时候调用其他组件。 输入文件的类型和传递给gcc的参数决定了gcc 调用具体的哪些组件。
对于开发者,它提供的足够多的参数,可以让 开发者全面控制代码的生成,这对嵌入式系统 级的软件开发非常重要
$objcopy -h 在makefile里面用-O binary 选项来生成原始的
二进制文件,即通常说的image文件
2019-10-16
谢谢关注
44
Objcopy使用举例
使用file命令查看文件类型
2019-10-16
谢谢关注
生成srec格式的目标文件
使用file命令查看新文件的类型
45
2019-10-16
谢谢关注
42
nm使用举例
2019-10-16
谢谢关注
如果对test可执行文件使用nm, 会有什么结果呢?
43
objcopy
可以将一种格式的目标文件内容进行转换,并 输出为另一种格式的目标文件。它使用GNU BFD(binary format description)库读/写目标文 件,通过这个BFD库,objcopy能以一种不同 于源目标文件的格式生成新的目标文件
谢谢关注
49
Objdump使用举例(2)
-d选项进行反汇编
2019-10-16
谢谢关注
50
readelf
readelf软件显示一个或多个ELF格式的目标文 件信息。
14
gcc的编译过程
一般情况下,c程序的编译过程为
预处理 编译成汇编代码 汇编成目标代码 链接
2019-10-16
谢谢关注
15
gcc的工作过程(2)
预处理 使用-E参数 输出文件的后缀为“.cpp”
gcc –E –o gcctest.cpp gcctest.c
使用wc命令比较预处理后的文件与源文件, 可以看到两个文件的差异
14. strip 丢弃目标文件中的全部或者特定符号。
2019-10-16
谢谢关注
33
15. libiberty 包含许多GNU程序都会用到的函数,这 些程序有: getopt, obstack, strerror, strtol 和 strtoul.
16. libbfd 二进制文件描述库.
17. libopcodes 用来处理opcodes的库, 在生成一些 应用程序的时候也会用到它, 比如 objdump.Opcodes是文本格式可读的处理器操作 指令.
被包含的原始文件的内容、权限、时间戳、所 有者等属性都保存在归档文件中,并且在提取 之后可以还原
2019-10-16
谢谢关注
36
使用ar建立库文件(1)
源程序add.c和minus.c
2019-10-16
谢谢关注
37
使用ar建立库文件(2)
编译成目标文件
Ar的rv参数的说明:
建立库文件
r:将多个文件组成一个文件
2019-10-16
谢谢关注
10
gcc使用举例(1) 源程序
2019-10-16
谢谢关注
11
gcc使用举例(2) 编译和
gcc的工作工程(1)
如果使用-v选项,则可以看到许多被隐藏的信 息
2019-10-16
谢谢关注
13
2019-10-16
谢谢关注
2. 调试工具, 即能够对执行程序进行源码或汇编级调试的软件
3. 软件工程工具, 用于协助多人开发或大型软件项目的管理的软件
2019-10-16
谢谢关注
6
GNU tools
GNU tools和其他一些优秀的开源软件可以完 全覆盖上述类型的软件开发工具。为了更好的 开发嵌入式系统,需要了解如下一些软件
文件格式
a.out assembler and link editor output 汇编器和链接编辑器的输出
coff common object file format 一种通用的对象文件格式
ELF excutive linked file Linux系统所采用的一种通用文件格式,支持动态连 接。ELF格式可以比COFF格式包含更多的调试信息
2019-10-16
谢谢关注
31
7. nm 列出目标文件中的符号。
8. objcopy把一种目标文件中的内容复制到另一种 类型的目标文件中.
9. objdump 显示一个或者更多目标文件的信息。使 用选项来控制其显示的信息。它所显示的信息通 常只有编写编译工具的人才感兴趣。
10. ranlib 产生归档文件索引,并将其保存到这个归 档文件中。在索引中列出了归档文件各成员所定 义的可重分配目标文件。
4
交叉开发平台
主机: 开发软件的平台,称为主机,往往是通用电脑;
目标机: 运行软件的平台,称为目标机,在这里是嵌入 式系统。
2019-10-16
谢谢关注
5
嵌入式交叉开发工具
掌握嵌入式开发工具的使用是进行嵌入式开发的前提 条件之一
与主流软件开发工具类似,嵌入式交叉开发工具也包 括
1. 编译器, 即能够把一个源程序编译生成一个可执行程序的软件
使用汇编器生成目标代码
as –o gcctest.o gcctest.s
2019-10-16
谢谢关注
20
汇编代码目标代码 直接编译成目标代码
2019-10-16
谢谢关注
使用汇编器
21
gcc的工作过程(5)
目标代码执行代码
gcc –o gcctest gcctest.o
直接生成执行代码
2019-10-16
谢谢关注
41
nm显示的符号类型
A:符号的值是绝对值,并且不会被将来的链接所改变 B:符号位于未初始化数据部分(BSS段) C:符号是公共的。公共符号是未初始化的数据。在链
接时,多个公共符号可能以相同的名字出现。如果符 号在其他地方被定义,则该文件中的这个符号会被当 作引用来处理 D:符号位于已初始化的数据部分 T:符号位于代码部分 U:符号未被定义 ?:符号类型未知,或者目标文件格式特殊
28
gcc的优化编译举例(2) 使用time命令统计程序的运行
2019-10-16
谢谢关注
29
GNU binutils
binutils是一组二进制工具程序集,是辅助 GCC的主要软件,它主要包括
1. addr2line 把程序地址转换为文件名和行号。在命 令行中给它一个地址和一个可执行文件名,它就会 使用这个可执行文件的调试信息指出在给出的地址 上是哪个文件以及行号。
11. readelf 显示ebf格式可执行文件的信息。
2019-10-16
谢谢关注
32
12. size 列出目标文件每一段的大小以及总体的大小。 默认情况下,对于每个目标文件或者一个归档文 件中的每个模块只产生一行输出。
13. strings 打印某个文件的可打印字符串,这些字符 串最少4个字符长,也可以使用选项-n设置字符串 的最小长度。默认情况下,它只打印目标文件初 始化和可加载段中的可打印字符;对于其它类型 的文件它打印整个文件的可打印字符,这个程序 对于了解非文本文件的内容很有帮助。
2019-10-16
谢谢关注
25
修改源程序
2019-10-16
谢谢关注
26
优化编译
优化编译选项有:
-O0 缺省情况,不优化
-O1
-O2
不同程度的优化
-O3 等等
2019-10-16
谢谢关注
27
gcc的优化编译举例(1) 考虑如下的源代码
2019-10-16
谢谢关注
不同的优化 编译选项
相关文档
最新文档