GNU编译工具链使用简介

上传人:guoc****ang 文档编号:243145615 上传时间:2024-09-16 格式:PPT 页数:30 大小:161KB
返回 下载 相关 举报
GNU编译工具链使用简介_第1页
第1页 / 共30页
GNU编译工具链使用简介_第2页
第2页 / 共30页
GNU编译工具链使用简介_第3页
第3页 / 共30页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,GNU,编译工具链使用简介,张吉豫,zhangjiyu,2005-03-12,内容,GNU,编译工具链的基本组成与工作流程,工具链的常用工具和选项,Unicore,工具链与交叉编译,2,编译工具链的基本工作流程,Pre-processor(,cpp,/,Gcc,-E),Compiler,(cc1 /,Gcc,-S),Assembler,(as /,Gcc,-c),Linker,(ld),hello.c,(text),hello.i,(text),hello.s,(text),hello.o,(binary),hello(binary),printf.o,(binary),一个“,hello world”,程序的演变历程,3,GNU,工具链的组成,GCCGNU Compiler Collection,Binutils,GNU binary utilities,Glibc,GNU C Library,软件开发的基本工具集合,4,GCC,功能:,高级语言,(.c,、,.,cpp,、,.F),汇编语言,(.s),用户界面,驱动各工具的执行,组成:,一组可执行程序,+,一组库,cpp,、,gcc,、,g+,、,g77 ,cpp0,、,cc1,、,cc1plus,、,f771 ,libgcc.a,、,crtbegin.o,、,crtend.o,支持多种语言和目标机,5,Binutils,功能:,汇编语言,(.s),目标文件,可执行程序,查看二进制文件信息,组成:,一组可执行程序,as,、,ld,objdump,、,readelf,、,ar,支持多种目标机,6,Glibc,功能:,提供语言和操作系统的标准库函数,组成:,若干可执行程序,+,大量库,ldd,、,iconv,、,locale,ISO C,、,POSIX,、,UNIX,、,GNU,绝大部分与目标机无关,7,GNU,工具链的工作流程,扩展名的默认含义,需要预处理的源代码:,.c,、,.cc,、,.F ,不需预处理的源代码:,.i,、,.ii,、,.f ,需要预处理的汇编代码:,.S,不需预处理的汇编代码:,.s,目标文件:,.o,静态库:,.a,动态库:,.so,8,cpp0 ,cc1、cc1plus、f771 ,as,ld,、,ar,.i、.ii、.f,.s,.o,libgcc.a,可执行程序或库,glibc,gcc,g+,g77,.i、.ii、.f,.c、.cc、.F,.s,.o,.c、.cc、.F,.i、.ii、.f,.s、.o,9,常用工具和选项,编译:,gcc/g+/g77,汇编和连接:,as,、,ld,二进制工具:,objdump,、,readelf,、,strip,、,ar,、,nm,、,ldd,gprof,、,gcov,10,帮助选项,-help,-target-help,显示与目标机有关的帮助信息,比如目标机的一些特殊选项,11,编译(,1,),gcc/g+/g77 options file.,-Wall,打印警告信息,-g,添加调试信息到输出文件,-O -O0 -O1 -O2 -O3 -Os,优化选项,若有多个则最后一个有效,-D -U,定义和取消宏定义,-,msoft,-float,使用软件库(,libgcc.a,),模拟硬件浮点指令,12,编译(,2,),-I,指定头文件搜索路径,若有多个则从前往后搜索,-L,指定库搜索路径,若有多个则从前往后搜索,-l,指定引用的库,从当前位置向后搜索,-static -shared,使用静态连接或动态连接,-pg -,fprofile,-arcs -,ftest,-coverage,添加额外的统计代码用于,profile,,与,gprof,和,gcov,配合使用,13,编译(,3,),-E,输出预处理后的文件(,.i,、,.ii,、,.f,等),-S,输出编译生成的汇编文件(,.s,),-c,输出汇编生成的目标文件(,.o,),-o,指定输出文件名,-v,输出编译过程的详细信息,包括编译过程中以哪些参数调用了哪些程序。,14,编译(,4,),基于,profiling,的优化编译,根据程序执行反馈的信息指导编译优化以产生出更好的代码。,使用方法,编译:添加,-,fprofile,-arcs,选项和其他优化选项进行编译,生成可执行程序,执行:执行程序,对每个源程序,sourcefile,生成,sourcefile.da,,,其中保存了统计信息,重新编译:添加,-,fbranch,-probabilities,选项和其他相同的优化选项重新编译,生成质量更高的代码,15,汇编和连接,as option. ,asmfile,.,汇编器,可由,gcc,-c,代替,ld options file.,连接器,可由,gcc,代替,通常由,gcc,调用,一般不直接使用,16,二进制工具,objdump,readelf,strip,ar,nm,ldd,gprof,gcov,17,ELF,可重定位目标文件示例,ELF header,.text,.,rodata,.data,.,bss,.,symtab,.,rel.text,.,rel.data,.debug,.line,.,strtab,Section header tables,sections,18,二进制工具(,1,),objdump,option(s) file(s),反汇编各种格式的目标文件和可执行程序,常用选项:,-d,只反汇编代码段,-D,反汇编代码段和数据段,-S,混合输出源代码和汇编代码,编译时必须加,-g,选项,19,二进制工具(,2,),readelf,option(s) elf-file(s),显示,ELF,格式文件信息,常用选项:,-e,显示头信息,包括,ELF file header,、,section header,、,program header,-s,显示符号表信息,-r,显示重定位信息,-a,显示所有信息,20,二进制工具(,3,),strip option(s) in-file(s),删除输入文件的符号表和指定的,section,常用选项:,-o,指定输出文件名,21,二进制工具(,4,),ar,管理归档文件(*,.a,),常用命令:,d m q r t x,分别用于删除、移动、添加、替换、显示、取出归档文件的内容,举例,ar,x /,usr/lib/libc.a,取出,libc.a,中的所有目标文件(*,.o,),到当前目录,ar,q,libmy.a,obj1.o obj2.o,将,obj1.o,和,obj2.o,加入到,libmy.a,中,22,二进制工具(,5,),nm option(s) file(s),显示文件的符号信息,可用于各种目标文件、可执行程序和归档文件(,.a,),举例,nm /,usr/lib/libc.a, symbol,printf.o,:,00000000 T _,IO_printf,00000000 T,printf,U,stdout,U,vfprintf,23,二进制工具(,6,),ldd,OPTION. FILE.,输出动态连接程序的共享库依赖关系,举例,njtAquarius,temp$,ldd,/bin/,ls,libtermcap.so.2 = /lib/libtermcap.so.2 (0x40028000),libacl.so.1 = /lib/libacl.so.1 (0x4002d000),libc.so.6 = /lib/i686/libc.so.6 (0x42000000),libattr.so.1 = /lib/libattr.so.1 (0x40033000),/lib/ld-linux.so.2 =,/lib/ld-linux.so.2,(0x40000000),njtAquarius,temp$,24,二进制工具(,7,),gprof,根据程序执行产生的数据(,gmon.out,),输出,profile,信息,包括每个函数执行时间、所占比例、调用关系等。,可用于分析程序的关键代码,指导程序员进行优化,使用方法,编译:加,-pg,选项,执行:产生,gmon.out,(,二进制数据),显示:,gprof,program_name output,25,二进制工具(,8,),gcov,另一个,profiling,工具,可以分析程序一次执行过程中每行源代码的执行数量、,branch,跳转情况等。,可用于分析程序的关键代码和构造,testsuite,源代码在,gcc,的包中,不属于,binutils,使用方法,编译:加,-,fprofile,-arcs -,ftest,-coverage,选项,最好不加优化选项,执行:针对每个,sourcefile,产生,sourcefile.bb,、,sourcefile.bbg,、,sourcefile.da,(,二进制数据),显示:,gcov,sourcefile.c,生成,sourcefile.gcov,26,Unicore,工具链,移植,GNU,工具链到,unicore,系统,两套版本,uc1,gcc-2.95.3 + glibc-2.1.3 + binutils-2.10.1,uc2,gcc-3.2.1 + glibc-2.3.1 + binutils-2.13.2,27,Unicore,工具链,使用方法,本地:,与在,x86,上的本地工具链几乎没有什么区别,交叉编译:,命令前都加上前缀,unicore32-linux-,,,如,unicore32-linux-gcc,路径:,.19:/usr/unicore/gnu-toolchain-unicore/uc2-0.3-hardfloat-glibc/bin,make CC= CXX= F77=,28,如何学习,今天的报告,亲自使用,互相学习,info/man,info,gcc,、,info,binutils,、,info,libc,29,Thank you!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!