《GNU开发工具链介绍课件.pptx》由会员分享,可在线阅读,更多相关《GNU开发工具链介绍课件.pptx(106页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、xlanchen2007.5.22 EmbeddedOperatingSystems 1“工欲善其事,必先利其器”-论语xlanchen2007.5.22 EmbeddedOperatingSystems 2主要内容l GNUTools 简介l GNUTools 交叉开发环境及其安装xlanchen2007.5.22 EmbeddedOperatingSystems 3本地开发 vs 交叉平台开发l 本地开发:一般软件的开发属于本地开发,也就是说开发软件的系统与运行软件的系统是相同的。l 交叉平台开发:本课程所涉及到的嵌入式系统开发属于交叉平台开发,也就是说开发软件的系统与运行软件的系统不同。
2、xlanchen2007.5.22 EmbeddedOperatingSystems 4交叉开发平台l 主机:开发软件的平台,称为主机,往往是通用电脑;l 目标机:运行软件的平台,称为目标机,在这里是嵌入式系统。xlanchen2007.5.22 EmbeddedOperatingSystems 5嵌入式交叉开发工具l 掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一l 与主流开发工具类似,嵌入式交叉开发工具也包括1.编译器,即能够把一个源程序编译生成一个可执行程序的软件2.调试工具,即能够对执行程序进行源码或汇编级调试的软件3.软件工程工具,用于协助多人开发或大型软件项目的管理的软件x
3、lanchen2007.5.22 EmbeddedOperatingSystems 6GNU toolsl GNUtools 和其他一些优秀的开源软件可以完全覆盖上述类型的软件开发工具。为了更好的开发嵌入式系统,需要熟悉如下一些软件l GCCl Binutils 辅助GCC 的主要软件l Gdbl makel cvsxlanchen2007.5.22 EmbeddedOperatingSystems 7一、GCCl 很多人认为GCC 只是一个C 编译器,其实GCC=GNUCompilerCollectionl 目前,GCC 可以支持多种高级语言,如l C、C+l ADAl ObjectCl J
4、AVAl Fortranl PASCALxlanchen2007.5.22 EmbeddedOperatingSystems 8GCC 下的工具l cpp 预处理器GNUC 编译器在编译前自动使用cpp 对用户程序进行预处理l gcc 符合ISO 等标准的C 编译器l g+基本符合ISO 标准的C+编译器l gcjGCC 的java 前端l gnatGCC 的GNUADA95 前端xlanchen2007.5.22 EmbeddedOperatingSystems 9GNU Toolsgccl gcc 是一个强大的工具集合,它包含了预处理器、编译器、汇编器、链接器等组件。它会在需要的时候调用其
5、他组件。输入文件的类型和传递给gcc 的参数决定了gcc调用具体的哪些组件。l 对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要xlanchen2007.5.22 EmbeddedOperatingSystems 10gcc 使用举例(1)源程序xlanchen2007.5.22 EmbeddedOperatingSystems 11gcc 使用举例(2)编译和运行编译运行xlanchen2007.5.22 EmbeddedOperatingSystems 12gcc 的工作过程(1)l 如果使用-v 选项,则可以看到许多被隐藏的信息xlan
6、chen2007.5.22 EmbeddedOperatingSystems 13xlanchen2007.5.22 EmbeddedOperatingSystems 14gcc 的编译过程l 一般情况下,c程序的编译过程为1、预处理2、编译成汇编代码3、汇编成目标代码4、链接xlanchen2007.5.22 EmbeddedOperatingSystems 151、预处理l 预处理:使用-E参数输出文件的后缀为“.cpp”gccEogcctest.cppgcctest.cl 使用wc 命令比较预处理后的文件与源文件,可以看到两个文件的差异xlanchen2007.5.22 Embedded
7、OperatingSystems 16行数 单词数 字节数预编译xlanchen2007.5.22 EmbeddedOperatingSystems 17l 预处理文件 汇编代码1)使用-x 参数说明根据指定的步骤进行工作,cpp-output 指明从预处理得到的文件开始编译2)使用-S说明生成汇编代码后停止工作gccxcpp-outputSogcctest.sgcctest.cppl 也可以直接编译到汇编代码gccSgcctest.c2、编译成汇编代码xlanchen2007.5.22 EmbeddedOperatingSystems 18预处理文件 汇编代码直接编译到汇编代码xlanche
8、n2007.5.22 EmbeddedOperatingSystems 193、编译成目标代码l 汇编代码 目标代码gccxassemblercgcctest.sl 直接编译成目标代码gcccgcctest.cl 使用汇编器生成目标代码asogcctest.ogcctest.sxlanchen2007.5.22 EmbeddedOperatingSystems 20汇编代码 目标代码直接编译成目标代码使用汇编器xlanchen2007.5.22 EmbeddedOperatingSystems 214、编译成执行代码l 目标代码 执行代码gccogcctestgcctest.ol 直接生成执行
9、代码gccogcctestgcctest.cxlanchen2007.5.22 EmbeddedOperatingSystems 22目标代码 执行代码直接生成执行代码xlanchen2007.5.22 EmbeddedOperatingSystems 23gcc 的高级选项l-Wall:打开所有的警告信息xlanchen2007.5.22 EmbeddedOperatingSystems 24根据警告信息检查源程序Main 函数的返回值为int在函数的末尾应当返回一个值xlanchen2007.5.22 EmbeddedOperatingSystems 25修改源程序xlanchen2007
10、.5.22 EmbeddedOperatingSystems 26优化编译l 优化编译选项有:l-O0缺省情况,不优化l-O1l-O2l-O3l 等等不同程度的优化xlanchen2007.5.22 EmbeddedOperatingSystems 27gcc 的优化编译举例(1)考虑如下的源代码不同的优化编译选项xlanchen2007.5.22 EmbeddedOperatingSystems 28gcc 的优化编译举例(2)使用time 命令统计程序的运行xlanchen2007.5.22 EmbeddedOperatingSystems 29二、GNU binutilsl binuti
11、ls 是一组二进制工具程序集,是辅助GCC 的主要软件,它主要包括1.addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。2.ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。xlanchen2007.5.22 EmbeddedOperatingSystems 303.as 是GNU 汇编器,主要用来编译GNUC 编译器gcc 输出的汇编文件,他将汇编代码转换成二进制代码,并存放到一个object 文件中,该目标文件将由连接器l
12、d 连接4.C+filt 解码C+符号名,连接器使用它来过滤C+和Java 符号,防止重载函数冲突。5.gprof 显示程序调用段的各种数据。6.ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用,最终形成一个可执行文件。通常,建立一个新编译程序的最后一步就是调用ld。xlanchen2007.5.22 EmbeddedOperatingSystems 317.nm 列出目标文件中的符号。8.objcopy 把一种目标文件中的内容复制到另一种类型的目标文件中.9.objdump 显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译
13、工具的人才感兴趣。10.ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。11.readelf 显示ebf 格式可执行文件的信息。xlanchen2007.5.22 EmbeddedOperatingSystems 3212.size 列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。13.strings 打印某个文件的可打印字符串,这些字符串最少4 个字符长,也可以使用选项-n 设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它
14、类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。14.strip 丢弃目标文件中的全部或者特定符号。xlanchen2007.5.22 EmbeddedOperatingSystems 3315.libiberty 包含许多GNU 程序都会用到的函数,这些程序有:getopt,obstack,strerror,strtol 和strtoul.16.libbfd 二进制文件描述库.17.libopcodes 用来处理opcodes 的库,在生成一些应用程序的时候也会用到它,比如objdump.Opcodes 是文本格式可读的处理器操作指令.xlanchen2007
15、.5.22 EmbeddedOperatingSystems 34binutils 开发工具使用举例l arl nml Objcopyl Objdumpl readelfxlanchen2007.5.22 EmbeddedOperatingSystems 351、arl ar 用于建立、修改、提取归档文件(archive),一个归档文件,是包含多个被包含文件的单个文件(也可以认为归档文件是一个库文件)。l 被包含的原始文件的内容、权限、时间戳、所有者等属性都保存在归档文件中,并且在提取之后可以还原xlanchen2007.5.22 EmbeddedOperatingSystems 36使用ar
16、 建立库文件(1)l 源程序add.c 和minus.cxlanchen2007.5.22 EmbeddedOperatingSystems 37使用ar 建立库文件(2)编译成目标文件将库文件拷贝到/usr/lib 目录下Ar的rv 参数的说明:r:将多个文件组成一个文件v:输出信息建立库文件xlanchen2007.5.22 EmbeddedOperatingSystems 38库文件使用举例在代码中使用Add 和Minus 函数xlanchen2007.5.22 EmbeddedOperatingSystems 39在编译时指定库文件指明将libtest.a 链接进来运行结果xlanchen2007.5.22 EmbeddedOperatingSystems 402、nml nm 的主要功能是列出目标文件中的符号,这样程序员就可以定位和分析执行程序和目标文件中的符号信息和它的属性