4-Linux环境下程序开发基础

上传人:muj****520 文档编号:252973044 上传时间:2024-11-26 格式:PPTX 页数:35 大小:584.54KB
返回 下载 相关 举报
4-Linux环境下程序开发基础_第1页
第1页 / 共35页
4-Linux环境下程序开发基础_第2页
第2页 / 共35页
4-Linux环境下程序开发基础_第3页
第3页 / 共35页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,/34,Linux,环,环,境,境,下,下,程,程,序,序,开,开,发,发,基,基,础,础,11/3/2022,Linux,环,境,境,下,下,程,程,序,序,编,编,译,译,Linux,环,环,境,境,下,下,程,程,序,序,编,编,译,译,2,11/3/2022,Linux,与,与C,Linux,与,与C,是,是,天,天,然,然,的,的,结,结,合,合,,,,,从,从,它,它,们,们,的,的,诞,诞,生,生,开,开,始,始,就,就,有,有,密,密,切,切,的,的,联,联,系,系,:,:Linux,的,的,前,前,身,身Unix,在,在,用,用C,语,语,言,言,改,改,写,写,之,之,后,后,才,才,为,为,世,世,界,界,所,所,广,广,泛,泛,接,接,受,受,;,;,而,而C,语,语,言,言,也,也,是,是,在,在Unix,编,编,写,写,、,、,传,传,播,播,的,的,过,过,程,程,中,中,发,发,展,展,和,和,流,流,行,行,起,起,来,来,的,的,Linux平,台,台为C,语,语言提,供,供的编,译,译工具,是,是gcc。Gcc除,了,了处理,一,一般的C语言,程,程序,,还,还支持C+,、,、Objective C,等,等一些,语,语言。,曙,曙光4000A提供,了,了PGI C/C+compilerpgcc/pgCC,Linux系,统,统与其,他,他系统,类,类似,C,语言程,序,序的运,行,行过程,分,分为三,步,步:,编写源,代,代码,用编译,工,工具编,译,译连接,,,,生成,可,可执行,文,文件,运行该,可,可执行,文,文件,3,11/3/2022,一个简,单,单的例,子,子hello.c,用vi,编写源,文,文件:,#,include,void main(),printf(“hello world.n”);,用gcc编译,gcchello.c,运行,a.out,4,11/3/2022,GCC,简,简介,gcc,(,(GNU CCompiler,),)是GNU推,出,出的功,能,能强大,、,、性能,优,优越的,多,多平台,编,编译器,,,,是GNU的,代,代表作,品,品之一,。,。,gcc编,译,译器,能,能将C、C+语,言,言源,程,程序,、,、汇,程,程式,化,化序,和,和目,标,标程,序,序编,译,译、,连,连接,成,成可,执,执行,文,文件,,,,如,果,果没,有,有给,出,出可,执,执行,文,文件,的,的名,字,字,gcc将,生,生成,一,一个,名,名为a.out的,文,文件,。,。,在Linux,系,系统,中,中,,可,可执,行,行文,件,件没,有,有统,一,一的,后,后缀,,,,系,统,统从,文,文件,的,的属,性,性来,区,区分,可,可执,行,行文,件,件和,不,不可,执,执行,文,文件,。,。而gcc则,通,通过,后,后缀,来,来区,别,别输,入,入文,件,件的,类,类别,,,,下,面,面我,们,们来,介,介绍gcc,常用,的,的一,些,些后,缀,缀。,.,c为,后,后缀,的,的文,件,件,C语,言,言源,代,代码,文,文件,.a,为,为后,缀,缀的,文,文件,,,,是,由,由目,标,标文,件,件构,成,成的,档,档案,库,库文,件,件,.C,,,,.cc,或,或.cxx,为,为后,缀,缀的,文,文件,,,,是C+源,代,代码,文,文件,.h,为,为后,缀,缀的,文,文件,,,,是,程,程序,所,所包,含,含的,头,头文,件,件,.o,为,为后,缀,缀的,文,文件,,,,是,编,编译,后,后的,目,目标,文,文件,gcc最,基,基本,的,的用,法,法是,gccoptionsfilenames,其中options就,是,是编,译,译器,所,所需,要,要的,参,参数,,,,filenames,给,给出,相,相关,的,的文,件,件名,称,称,5,11/3/2022,GCC常,用,用编译参,数,数,-c:只,编,编译,不,连,连接成为,可,可执行文,件,件,编译,器,器只是由,输,输入的.c等源代,码,码文件生,成,成.o为,后,后缀的目,标,标文件,,通,通常用于,编,编译不包,含,含主程序,的,的子程序,文,文件。,-o output_filename:确,定,定输出文,件,件的名称,为,为output_filename,,,,同时这,个,个名称不,能,能和源文,件,件同名。,如,如果不给,出,出这个选,项,项,gcc就给出,预,预设的可,执,执行文件a.out。,-g:产,生,生符号调,试,试工具(GNU的gdb),所,所必要的,符,符号资讯,,,,要想对,源,源代码进,行,行调试,,我,我们就必,须,须加入这,个,个选项。,-O:对,程,程序进行,优,优化编译,、,、连接,,采,采用这个,选,选项,整,个,个源代码,会,会在编译,、,、连接过,程,程中进行,优,优化处理,,,,这样产,生,生的可执,行,行文件的,执,执行效率,可,可以提高,,,,但是,,编,编译、连,接,接的速度,就,就相应地,要,要慢一些,。,。,-O2:,比,比-O更,好,好的优化,编,编译、连,接,接,当然,整,整个编译,、,、连接过,程,程会更慢,。,。,6,11/3/2022,GCC常,用,用编译参,数,数,-Idirname:将dirname所指,出,出的目录,加,加入到程,序,序头文件,目,目录列表,中,中,是在,预,预编译过,程,程中使用,的,的参数。C程序中,的,的头文件,包,包含两种,情,情况:,A)#include,B)#include“myinc.h”,其中,A,类,类使用尖,括,括号(),B类使用,双,双引号(,“,“”),。,。对于A,类,类,预处,理,理程序cpp在系,统,统预设包,含,含文件目,录,录(如/usr/include),中,中搜寻相,应,应的文件,,,,而对于B类,cpp在当,前,前目录中,搜,搜寻头文,件,件,这个,选,选项的作,用,用是告诉cpp,,如,如果在当,前,前目录中,没,没有找到,需,需要的文,件,件,就到,指,指定的dirname目录,中,中去寻找,。,。在程序,设,设计中,,如,如果我们,需,需要的这,种,种包含文,件,件分别分,布,布在不同,的,的目录中,,,,就需要,逐,逐个使用-I选项,给,给出搜索,路,路径。,7,11/3/2022,GCC常,用,用编译参,数,数,-Ldirname:将dirname所指,出,出的目录,加,加入到程,序,序函数档,案,案库文件,的,的目录列,表,表中,是,在,在连接过,程,程中使用,的,的参数。,在,在预设状,态,态下,连,接,接程序ld在系统,的,的预设路,径,径中(如/usr/lib)寻找所,需,需要的档,案,案库文件,,,,这个选,项,项告诉连,接,接程序,,首,首先到-L指定的,目,目录中去,寻,寻找,然,后,后到系统,预,预设路径,中,中寻找,,如,如果函数,库,库存放在,多,多个目录,下,下,就需,要,要依次使,用,用这个选,项,项,给出,相,相应的存,放,放目录。,-lname:在,连,连接时,,装,装载名字,为,为“libname.a”,的,的函数库,,,,该函数,库,库位于系,统,统预设的,目,目录或者,由,由-L选,项,项确定的,目,目录下。,例,例如,-lm表示,连,连接名为,“,“libm.a”,的,的数学函,数,数库。,上面我们,简,简要介绍,了,了gcc,编,编译器最,常,常用的功,能,能和主要,参,参数选项,,,,更为详,尽,尽的资料,可,可以参看Linux系统的,联,联机帮助,。,。,8,11/3/2022,GCC,应,应,用,用,举,举,例,例,1.gcchello.c,生,生,成,成a.out,2.gcc,ohellohelo.c,生,生,成,成hello,3.gcc,O,ohellohello.c,生,生,成,成hello,4.gcc,O2,ohellohello.c,生,生,成,成hello,5.gcc,chello.c,生,生,成,成hello.o,gcc,ohellohello.o,生,生,成,成hello,6.gcc,chello1.c,生,生,成,成hello1.o,gcc,chello2.c,生,生,成,成hello2.o,gcc,ohellohello1.ohello2.o,生,生,成,成hello,7.gcc,otesttest1.o,lm,I/home/czn/include,9,11/3/2022,Make简,介,介,在开发大系,统,统时,经常,要,要将程序划,分,分为许多模,块,块。各个模,块,块之间存在,着,着各种各样,的,的依赖关系,,,,在Linux中通常,使,使用 Makefile,来管理。,由于各个模,块,块间不可避,免,免存在关联,,,,所以当一,个,个模块改动,后,后,其他模,块,块也许会有,所,所更新,当,然,然对小系统,来,来说,手工,编,编译连接是,没,没问题,但,是,是如果是一,个,个大系统,,存,存在很多个,模,模块,那么,手,手工编译的,方,方法就不适,用,用了。,为此,在,Linux,系,系统中,专,门,门提供了一,个,个make,命,命令来自动,维,维护目标文,件,件。,与手工编译,和,和连接相比,,,,make,命,命令的优点,在,在于他只更,新,新修改过的,文,文件,而对,没,没修改的文,件,件则置之不,理,理,并且make命令,不,不会漏掉一,个,个需要更新,的,的文件。,10,11/3/2022,一个简单的,例,例子,先举一个例,子,子:,a.c b.c,两个程序,a.cextern void p(char*);main()p(hello world);,b.cvoidp(char*str)printf(%sn,str);,Makefilehello:a.cb.cgcca.c b.c-ohello,注意这里是,一,一个,Tab,执行,makegcc a.c b.c-ohello,产生一个叫,hello,的可执行程,序,序,11,11/3/2022,书写makefile,文,文件,Makefile时由,规,规则来组成,的,的,每一条,规,规则都有三,部,部分组成:,目,目标(object),依赖(dependency),和,和命令(command).在上,面,面的例子中,Makefile,只,只有一条规,则,则,其目标,为,为hello,期依赖,为,为a.cb.c,其,命,命令为gcc a.cb.c-o hello.,依赖可以是,另,另一条规则,的,的目标,也,可,可以是文件.每一条规,则,则被这样处,理,理.如目标,是,是一个文件,是,是:当它的,依,依赖是文件,时,时,如果依,赖,赖的时间比,目,目标要新,则,则运行规,则,则所包含的,命,命令来更新,目,目标;如,果,果依赖是另,一,一个目标则,用,用同样的方,法,法先来处理,这,这个目标.,如,如目标不是,一,一个存在的,文,文件时,则,一,一定执行.,12,11/3/2022,一个简单的makefile文件,例如:Makefile hello:a.ob.ogcc a.o b.o-o helloa.o:a.cgcc c a.c,b.o:b.cgcc cb.c,当运行make时,可,以,以接一目标,名,名(eg:makehello)作为参数,,,,表示要处,理,理改目标。,如,如没有参数,,,,则处理第,一,一个目标。,对上述例子,执,执行make,则是处,理,理hello这个目标,。,。,hello,依,依赖于文件,目,目标a.o,和,和b.o,,则,则先去处理a.o,调,用,用gcc,c a.c来更新a.o,之后,更,更新b.o,,,,最后调用gcc a.c b.o-ohello,来,来更新hello.,13,11/3/2022,Make中,的,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


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

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


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