4.Linux程序设计基础—gcc

上传人:马*** 文档编号:243133148 上传时间:2024-09-16 格式:PPT 页数:17 大小:970.50KB
返回 下载 相关 举报
4.Linux程序设计基础—gcc_第1页
第1页 / 共17页
4.Linux程序设计基础—gcc_第2页
第2页 / 共17页
4.Linux程序设计基础—gcc_第3页
第3页 / 共17页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text stylesgood1,Second levelgood2,Third levelgood3,Fourth levelgood4,Fifth levelgood5,博创科技 嵌入互动, 2006,博创科技, 2005,博创科技,北 京 博 创 兴 业 科 技 有 限 公 司,BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co . , LTD,博创科技 嵌入互动,Click to edit Master title style,Click to edit Master text stylesgood1,Second levelgood2,Third levelgood3,Fourth levelgood4,Fifth levelgood5,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,9/16/2024,*,Click to edit Master title style,Linux程序设计基础gcc使用,gcc,的简介,编译如,C,、,C+,、,Object C,、,Java,、,Fortran,、,Pascal,、,Modula-3,和,Ada,等多种语言,一个交叉平台编译器,适合在嵌入式领域的开发编译,全称为,GNU Compiler Collection, GNU,项目中符合,ANSI C,标准的编译系统,gcc,可以使程序员灵活地控制编译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理,预处理,链接,编译,汇编,源程序,(*.c),可执行文件,预处理器,编译器,汇编器,连接器,gcc,的四个阶段,命令,gcc,首先调用,cpp,进行预处理,在预处理过程中,对源代码文件中的文件包含,(include),、预编译语句,(,如宏定义,define,等,),进行分析。,接着调用,cc1,进行编译,这个阶段根据输入文件生成以,.o,为后缀的目标文件。,汇编过程是针对汇编语言的步骤,调用,as,进行工作,一般来讲,,.S,或,.s,为后缀的汇编语言源代码文件汇编之后都生成以,.o,为后缀的目标文件。,当所有的目标文件都生成之后,,gcc,就调用,ld,来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的函数库中连到合适的地方。,gcc,版本历史,可执行文件格式,Linux,系统中可执行文件有两种格式。,第一种格式是,a.out,格式,这种格式用于早期的,Linux,系统以及,Unix,系统的原始格式。,a.out,来自于,Unix C,编译程序默认的可执行文件名。当使用共享库时,,a.out,格式就会发生问题。把,a.out,格式调整为共享库是一种非常复杂的操作。,因此,一种新的文件格式被引入,Unix,系统,5,的第四版本和,Solaris,系统中。它被称为可执行和连接的格式(,ELF,)。这种格式很容易实现共享库。,ELF,格式已经被,Linux,系统作为标准的格式采用。,ELF(Executable and Linking Format ),gcc,编译程序产生的所有的二进制文件都是,ELF,格式的文件(即使可执行文件的默认名仍然是,a.out,)。较旧的,a.out,格式的程序仍然可以运行在支持,ELF,格式的系统上。,gcc,的使用,基本语法,gcc options filenames,说明:,在,gcc,后面可以有多个编译选项,同时进行多个编译操作。很多的,gcc,选项包括一个以上的字符。因此你必须为每个选项指定各自的连字符。例如,下面的两个命令是不同的:,gcc -p -g test1.c,gcc -pg test1.c,当你不用任何选项编译一个程序时,,GCC,将会建立,(,假定编译成功,),一个名为,a.out,的可执行文件。,Gcc,所支持的后缀名解释,.c C,源程序,.C/.cc/.cxx c+,源程序,.m Objective-C,原始程序,.i,经过预处理的,C,原始程序,.ii,经过预处理的,C+,原始程序,.s/.S,汇编语言原始程序,.h,预处理文件,(,头文件,),.o,目标文件,.a/.so,编译后的库文件,gcc,选项,-o,选项 你能用,-o,编译选项来为将产生的可执行文件指定一个文件名来代替,a.out,。,例:,gcc,o count count.c,-c,选项:告诉,GCC,仅把源代码编译为目标代码而跳过汇编和连接的步骤。,例:,gcc,c test2.c,-E,不生成文件,只输出预处理结果,(,输出终端,),。,-S,编译选项告诉,gcc,在为,C,代码产生了汇编语言文件后停止编译。,-,g,产生调试工具gdb所必要的符号信息,要想对编译出的程序调试,就必须加入这个选项,。,-Wall,提示更多警告信息,警告选项,在,gcc,中用开关,-Wall,控制警告信息,使用示例命令如下:,gcc,Wall -o test3_1 test3_1.c,-w,不生成任何警告信息。,查找选项,gcc,一般使用默认路径查找头文件和库文件。如果文件所用的头文件或库文件不在缺省目录下,则编译时要指定它们的查找路径。,-I,选项:指定头文件的搜索目录,例:,gcc,I/export/home/st,o test1 test1.c,-L,选项:指定库文件的搜索目录,例:,gcc,L/usr/X11/R6/lib,o test1 test1.c,与库和路径相关选项,-I dir,在,dir,这个目录寻找被,include,的文件,-L dir,在,dir,这个目录寻找被,-I,的库,-l name,链接库文件文件名,为,libname.a,或,libname.so,的库,-fpic,或,-fPIC,产生位置无关的目标代码,以构造共享库,(share library),-static,禁止与共享库链接,若没有,则优选选择共享库链接,-shared,产生共享库,在创建共享函数库 时使用,多个源文件生成一个可执行文件,问题:有多个源文件时,如何生成一个可执行文件?,方法,1,:,gcc,o mytest test1.c test2.c test3.c,方法,2,:,gcc -c test1.c,gcc c test2.c,gcc c test3.c,gcc o mytest test1.o test2.o test3.o,优化选项,优化选项可以使,GCC,在耗费更多编译时间和牺牲易调试性的基础上产生更小更快的可执行文件。这些选项中最典型的是,-O,和,-O2,选项。,-O0,不进行优化处理。,-O,选项:告诉,GCC,对源代码进行基本优化。,源代码会在编译,连接过程中进行优化处理,。,-O2,选项:告诉,GCC,产生尽可能小和尽可能快的代码。,-O2,选项将使编译的速度比使用,-O,时慢。但通常产生的代码执行速度会更快。,-O3,选项:比,-O2,更进一步优化,包括,inline,函数。,版本选项,-v,选项,用户将会得到自己目前正在使用的,gcc,的版本及与版本相关的一些信息。,gcc -v,将得到如下结果:,Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs,gcc version 2.7.2,-V,选项,如果安装了多个版本的,gcc,,并且想强制执行其中的某个版本,可以用命令通知系统用户要使用的版本。,gcc -V2.6.3 -v,静态库与动态库,静态库,:,在编译过程中将库函数代码直接加入到生成的可执行程序中,程序运行过程中不需要利用库函数,共享库,:,编译时,只是在生成的可执行程序中简单指定需要使用库函数信息,程序运行过程中需要利用库函数,动态库,:,共享库的一种变化形式,目前大都采用共享库的方式,命名方式,:,静态库,:,前缀,lib+,库名,+.a(libm.a,libstdc+.a,等,),共享库,:,前缀,lib+,库名,+.so+,版本号,(libm.so.6,libc.so.6),总结,:,动态共享库的好处,1.,动态共享库是共享的,节省了物理开销,2.,版本更新容易,运行时调用,库更新后不用重新链接,3.,允许用户在运行时再确定调用哪个库,.,注意,:,如果动态共享库无法加载,可能是路径或依赖的问题,Thank You!,LOGO,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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