《Linux操作系统-总复习-第十二章.ppt》由会员分享,可在线阅读,更多相关《Linux操作系统-总复习-第十二章.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Linux操作系统操作系统总复习总复习主要内容:主要内容:n n12.1 gcc简介简介n n12.2 gcc编译器的用法和执行过程编译器的用法和执行过程n n12.3 makefile的结构的结构n n12.4 gdb调试程序调试程序n n12.5 小结小结 第十二章第十二章 Linux基本编程基本编程12.1 gcc简介简介n ngcc简介简介LinuxLinux系统下的系统下的系统下的系统下的gcc(GNUgcc(GNUCCompiler)CCompiler)是是是是GNUGNU推出的功能强大、性能优越的多平台编译推出的功能强大、性能优越的多平台编译推出的功能强大、性能优越的多平台编译推
2、出的功能强大、性能优越的多平台编译器,是器,是器,是器,是GNUGNU的代表作品之一。的代表作品之一。的代表作品之一。的代表作品之一。gccgcc是可以在多种硬体平台上编译出可执行程是可以在多种硬体平台上编译出可执行程是可以在多种硬体平台上编译出可执行程是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器序的超级编译器,其执行效率与一般的编译器序的超级编译器,其执行效率与一般的编译器序的超级编译器,其执行效率与一般的编译器相比平均效率要高相比平均效率要高相比平均效率要高相比平均效率要高20%30%20%30%。n ngcc的执行过程的执行过程虽然我们称虽然我们称虽然我们
3、称虽然我们称gccgcc是是是是C C语言的编译器,但使用语言的编译器,但使用语言的编译器,但使用语言的编译器,但使用gccgcc由由由由C C语言源代码文件生成可执行文件的过程不语言源代码文件生成可执行文件的过程不语言源代码文件生成可执行文件的过程不语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联仅仅是编译的过程,而是要经历四个相互关联仅仅是编译的过程,而是要经历四个相互关联仅仅是编译的过程,而是要经历四个相互关联的步骤的步骤的步骤的步骤 n n预处理预处理预处理预处理(也称预编译,也称预编译,也称预编译,也称预编译,Preprocessing)Preproces
4、sing)n n编译编译编译编译(Compilation)(Compilation)n n汇编汇编汇编汇编(Assembly)(Assembly)n n链接链接链接链接(Linking)(Linking)n nGcc编译器能将编译器能将C、C+语言源程序编译语言源程序编译成目标程序,然后将目标程序链接成可执成目标程序,然后将目标程序链接成可执行文件,如果没有给出可执行文件的名字,行文件,如果没有给出可执行文件的名字,gcc将生成一个名为将生成一个名为a.out的文件。的文件。n n在在Linux系统中,可执行文件没有统一的系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文后缀,系
5、统从文件的属性来区分可执行文件和不可执行文件。而件和不可执行文件。而gcc则通过则通过后缀后缀来区来区别输入文件的类别,下面我们来介绍别输入文件的类别,下面我们来介绍gcc所所遵循的部分约定规则。遵循的部分约定规则。n ngccgcc可以根据文件扩展名执行操作可以根据文件扩展名执行操作可以根据文件扩展名执行操作可以根据文件扩展名执行操作gccgcc文件文件文件文件扩扩扩扩展名展名展名展名规规规规范范范范扩扩扩扩展名展名展名展名类类类类型型型型可可可可进进进进行的操作方式行的操作方式行的操作方式行的操作方式.c.cc c语语语语言源程序言源程序言源程序言源程序预处预处预处预处理、理、理、理、编译
6、编译编译编译、汇编汇编汇编汇编、链链链链接接接接.C.C,.cc.cc,.cp.cp,.cppcpp,.c+.c+,.cxxcxxc+c+语语语语言源程序言源程序言源程序言源程序预处预处预处预处理、理、理、理、编译编译编译编译、汇编汇编汇编汇编、链链链链接接接接.i.i预处预处预处预处理后的理后的理后的理后的c c语语语语言源程序言源程序言源程序言源程序编译编译编译编译、汇编汇编汇编汇编、链链链链接接接接.s.s预处预处预处预处理后的理后的理后的理后的汇编汇编汇编汇编程序程序程序程序汇编汇编汇编汇编、链链链链接接接接.h.h头头头头文件文件文件文件不不不不进进进进行任何操作行任何操作行任何操作
7、行任何操作.o.o目目目目标标标标文件文件文件文件链链链链接接接接12.2 gcc的用法的用法n n在使用在使用Gcc编译器编译器的时候,我们必须给出的时候,我们必须给出一系列必要的调用参数和文件名称。一系列必要的调用参数和文件名称。Gcc编译器编译器的调用参数大约有的调用参数大约有100多个,其中多个,其中多数参数我们可能根本就用不到,这里只多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。介绍其中最基本、最常用的参数。n n基本使用格式基本使用格式$gccgcc选项选项选项选项 gccgcc常用常用常用常用选项选项选项选项选项选项选项选项含含含含义义义义-o-o filef
8、ile将将将将经过经过经过经过gccgccgccgcc处处处处理理理理过过过过的的的的结结结结果存果存果存果存为为为为文件文件文件文件filefilefilefile,这这这这个个个个结结结结果果果果文件可能是文件可能是文件可能是文件可能是预处预处预处预处理文件、理文件、理文件、理文件、汇编汇编汇编汇编文件、目文件、目文件、目文件、目标标标标文件或文件或文件或文件或者最者最者最者最终终终终的可的可的可的可执执执执行文件。行文件。行文件。行文件。假假假假设设设设被被被被处处处处理的源文件理的源文件理的源文件理的源文件为为为为source.suffixsource.suffixsource.suf
9、fixsource.suffix,如果,如果,如果,如果这这这这个个个个选项选项选项选项被省略了,那么生被省略了,那么生被省略了,那么生被省略了,那么生成的可成的可成的可成的可执执执执行文件默行文件默行文件默行文件默认认认认名称名称名称名称为为为为a.outa.outa.outa.out;目;目;目;目标标标标文件默文件默文件默文件默认认认认名名名名为为为为source.osource.osource.osource.o;汇编汇编汇编汇编文件默文件默文件默文件默认认认认名名名名为为为为source.ssource.ssource.ssource.s;生;生;生;生成的成的成的成的预处预处预处预
10、处理文件理文件理文件理文件则发则发则发则发送到送到送到送到标标标标准准准准输输输输出出出出设备设备设备设备。n n基本使用格式基本使用格式$gccgcc选项选项选项选项 gccgcc常用常用常用常用选项选项选项选项选项选项选项选项含含含含义义义义-c-c仅对仅对仅对仅对源文件源文件源文件源文件进进进进行行行行编译编译编译编译,不,不,不,不链链链链接生成可接生成可接生成可接生成可执执执执行文件。在行文件。在行文件。在行文件。在对对对对源文件源文件源文件源文件进进进进行行行行查错时查错时查错时查错时,或只需,或只需,或只需,或只需产产产产生目生目生目生目标标标标文件文件文件文件时时时时可以使用可
11、以使用可以使用可以使用该选项该选项该选项该选项。-ggdbggdb 在可在可在可在可执执执执行文件中加入行文件中加入行文件中加入行文件中加入调试调试调试调试信息,方便信息,方便信息,方便信息,方便进进进进行程序的行程序的行程序的行程序的调试调试调试调试。如果使用中括号中的如果使用中括号中的如果使用中括号中的如果使用中括号中的选项选项选项选项,表示加入,表示加入,表示加入,表示加入gdbgdb扩扩扩扩展的展的展的展的调调调调试试试试信息,方便使用信息,方便使用信息,方便使用信息,方便使用gdbgdb来来来来进进进进行行行行调试调试调试调试gccgcc常用常用常用常用选项选项选项选项选项选项选项选
12、项含含含含义义义义-I Idirdir在在在在编译编译编译编译源程序源程序源程序源程序时时时时增加一个搜索增加一个搜索增加一个搜索增加一个搜索头头头头文件的文件的文件的文件的额额额额外目外目外目外目录录录录dirdir,即,即,即,即includeinclude增加一个搜索的增加一个搜索的增加一个搜索的增加一个搜索的额额额额外目外目外目外目录录录录。-w-w禁止所有警告禁止所有警告禁止所有警告禁止所有警告-WWwarningwarning允允允允许产许产许产许产生生生生warningwarning类类类类型的警告,型的警告,型的警告,型的警告,warningwarning可以是:可以是:可以是
13、:可以是:mainmain、unusedunused等很多取等很多取等很多取等很多取值值值值,最常用是,最常用是,最常用是,最常用是-Wall-Wall,表示,表示,表示,表示产产产产生所有警告。如果生所有警告。如果生所有警告。如果生所有警告。如果warningwarning取取取取值为值为值为值为errorerror,其含,其含,其含,其含义义义义是将是将是将是将所有警告作所有警告作所有警告作所有警告作为错误为错误为错误为错误(errorerror),即出),即出),即出),即出现现现现警告就停止警告就停止警告就停止警告就停止编译编译编译编译。编译单个文件编译单个文件文件清单:文件清单:my
14、_app1.cmy_app1.c#include#include#defineN10#defineN10voidvoidgreeting(chargreeting(char*name);*name);intint main(voidmain(void)charcharnameNnameN;printf(Yourprintf(Your Name,PleaseName,Please:);:);scanf(%s,namescanf(%s,name););greeting(namegreeting(name););return0;return0;voidvoidgreeting(chargreetin
15、g(char*name)*name)Printf(“HelloPrintf(“Hello%s!rn“,names!rn“,name););n n编译这个文件:编译这个文件:gccmy_app1.c-omyapp1n n执行生成的可执行文件:执行生成的可执行文件:n n#./myapp1YourName,Please:nihaoHellonihao!n n文件清单文件清单文件清单文件清单greeting.hgreeting.h#ifndefifndef _GREETING_H _GREETING_H#define _GREETING_H#define _GREETING_Hvoid greeti
16、ng(char*void greeting(char*name);name);#endifendif greeting.cgreeting.c#include#include#include#include greeting.hgreeting.h void greeting(char*name)void greeting(char*name)printf(Helloprintf(Hello%s!rn,names!rn,name););my_app.cmy_app.c#include#include#include#include greeting.hgreeting.h#define N 1
17、0#define N 10intint main(voidmain(void)char char nameNnameN;printf(Yourprintf(Your Name,PleaseName,Please:);:);scanf(%s,namescanf(%s,name););greeting(namegreeting(name););return 0;return 0;编译多个文件编译多个文件编译多个文件编译多个文件n n目录结构目录结构(1)编译命令编译命令编译命令编译命令n n$gccgcc my_app.cmy_app.c greeting.cgreeting.coomy_appm
18、y_appn n目录结构目录结构(2)编译方式编译方式编译方式编译方式(1)(1)n n$gccgcc my_app.cmy_app.c functions/functions/greeting.cgreeting.coomy_appmy_app-I Ifunctionsfunctionsgreeting.h./greeting.cmy_app.cgreeting.h./greeting.cmy_app.cfunctionsn n目录结构目录结构(2)编译方式编译方式(2)n n分步编译分步编译分步编译分步编译n n命令:命令:命令:命令:1 1、$gccgcc-c-c my_app.cmy_
19、app.c-IfunctionsIfunctions 2 2、$gccgcc-c-cfunctions/functions/greeting.cgreeting.c 3 3、$gccgcc my_app.omy_app.o greeting.ogreeting.ooomy_appmy_appn n思路:思路:思路:思路:编译每一个编译每一个编译每一个编译每一个.c.c文件,得到文件,得到文件,得到文件,得到.o.o的目标文件;的目标文件;的目标文件;的目标文件;将每一个将每一个将每一个将每一个.o.o的目标文件链接成一个可执行的文件;的目标文件链接成一个可执行的文件;的目标文件链接成一个可执行
20、的文件;的目标文件链接成一个可执行的文件;12.3 使用使用make工具工具n n适用场合:适用场合:适用场合:适用场合:多个文件组成的软件项目多个文件组成的软件项目多个文件组成的软件项目多个文件组成的软件项目n nmakefilemakefile基本格式:基本格式:基本格式:基本格式:n n目标:欲生成的目标文件目标:欲生成的目标文件目标:欲生成的目标文件目标:欲生成的目标文件n n依赖项:生成目标需要的文件依赖项:生成目标需要的文件依赖项:生成目标需要的文件依赖项:生成目标需要的文件n n原理:原理:原理:原理:判断依赖项是否为最新,否则,生成新的目标判断依赖项是否为最新,否则,生成新的目
21、标判断依赖项是否为最新,否则,生成新的目标判断依赖项是否为最新,否则,生成新的目标n nmakemake工具的使用格式:工具的使用格式:工具的使用格式:工具的使用格式:makemake命令选项命令选项命令选项命令选项命令参数命令参数命令参数命令参数 通常使用通常使用通常使用通常使用makemake就可以了,就可以了,就可以了,就可以了,makemake会寻找会寻找会寻找会寻找makefilemakefile作作作作为编译指导文件;为编译指导文件;为编译指导文件;为编译指导文件;目标:依赖项列表目标:依赖项列表(Tab缩进)命令缩进)命令nmake命令执行时,需要一个命令执行时,需要一个make
22、file文件,以文件,以告诉告诉make命令需要怎么样的去编译和链接程序。命令需要怎么样的去编译和链接程序。nmakefile关系到了整个工程的编译规则。一个工程关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,在若干个目录中,makefile定义了一系列的规则来定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为操作,因为makefile就像一个就
23、像一个Shell脚本一样,其脚本一样,其中也可以执行操作系统的命令。中也可以执行操作系统的命令。n nmakefilemakefile示例示例示例示例makefilemakefile文件文件文件文件1 1 my_app:greeting.omy_app:greeting.o my_app.omy_app.o2 2gccgcc my_app.omy_app.o greeting.ogreeting.o-o -o my_appmy_app3 3 greeting.o:functionsgreeting.cgreeting.o:functionsgreeting.c functions functi
24、onsgreeting.hgreeting.h4 4gccgcc-c functions-c functionsgreeting.cgreeting.c5 5 my_app.o:my_app.cmy_app.o:my_app.c functions functionsgreeting.hgreeting.h6 6gccgcc c c my_app.cmy_app.c IfunctionsIfunctionsn n目标的依赖关系目标的依赖关系my_appmy_app.ogreeting.omy_app.cfunctionsgreeting.hfunctionsgreeting.cgcc c my
25、_app.c Ifunctions gcc-c functionsgreeting.c gcc my_app.o greeting.o-o my_app 12.4 调试调试n n调试调试静态调试:静态调试:静态调试:静态调试:n n在程序编译阶段查错并修正错误;在程序编译阶段查错并修正错误;在程序编译阶段查错并修正错误;在程序编译阶段查错并修正错误;n n主要为语法错误:主要为语法错误:主要为语法错误:主要为语法错误:输入错误;输入错误;输入错误;输入错误;类型匹配错误;类型匹配错误;类型匹配错误;类型匹配错误;n n排错方式:排错方式:排错方式:排错方式:利用错误、警告信息,并结合源文件环境
26、排错利用错误、警告信息,并结合源文件环境排错利用错误、警告信息,并结合源文件环境排错利用错误、警告信息,并结合源文件环境排错n n静态调试总结静态调试总结主要为语法错误:主要为语法错误:主要为语法错误:主要为语法错误:n n输入错误;输入错误;输入错误;输入错误;n n类型匹配错误;类型匹配错误;类型匹配错误;类型匹配错误;分析信息:分析信息:分析信息:分析信息:n n主要来自主要来自主要来自主要来自gccgcc编译时产生的提示信息编译时产生的提示信息编译时产生的提示信息编译时产生的提示信息错误警告定位:错误警告定位:错误警告定位:错误警告定位:n n不一定在提示信息描述的地方;不一定在提示信
27、息描述的地方;不一定在提示信息描述的地方;不一定在提示信息描述的地方;n n综合分析提示信息及提示行的上下文环境,定位并综合分析提示信息及提示行的上下文环境,定位并综合分析提示信息及提示行的上下文环境,定位并综合分析提示信息及提示行的上下文环境,定位并修正错误、警告。修正错误、警告。修正错误、警告。修正错误、警告。n n有的警告可以不用修复;有的警告可以不用修复;有的警告可以不用修复;有的警告可以不用修复;n nGUNDebuger的功能:的功能:启动程序,设置程序执行的上下文环境;启动程序,设置程序执行的上下文环境;启动程序,设置程序执行的上下文环境;启动程序,设置程序执行的上下文环境;在指
28、定的条件下停止程序;在指定的条件下停止程序;在指定的条件下停止程序;在指定的条件下停止程序;程序停止时,检查程序的状态;程序停止时,检查程序的状态;程序停止时,检查程序的状态;程序停止时,检查程序的状态;在程序运行时,改变程序状态,使其按照改变在程序运行时,改变程序状态,使其按照改变在程序运行时,改变程序状态,使其按照改变在程序运行时,改变程序状态,使其按照改变后的状态继续执行。后的状态继续执行。后的状态继续执行。后的状态继续执行。动态调试动态调试gdbgdb常用的常用的常用的常用的调试调试调试调试命令命令命令命令命令命令命令命令含含含含义义义义filefile指定需要指定需要指定需要指定需要
29、进进进进行行行行调试调试调试调试的程序的程序的程序的程序stepstep单单单单步(行)步(行)步(行)步(行)执执执执行,如果遇到函数会行,如果遇到函数会行,如果遇到函数会行,如果遇到函数会进进进进入函数内部入函数内部入函数内部入函数内部nextnext单单单单步(行)步(行)步(行)步(行)执执执执行,如果遇到函数不会行,如果遇到函数不会行,如果遇到函数不会行,如果遇到函数不会进进进进入函数内部入函数内部入函数内部入函数内部runrun启启启启动动动动被被被被执执执执行的程序行的程序行的程序行的程序quitquit退出退出退出退出gdbgdb调试环调试环调试环调试环境境境境printpri
30、nt查查查查看看看看变变变变量或者表达式的量或者表达式的量或者表达式的量或者表达式的值值值值breakbreak设设设设置断点,程序置断点,程序置断点,程序置断点,程序执执执执行到断点就会行到断点就会行到断点就会行到断点就会暂暂暂暂停起来停起来停起来停起来shellshell执执执执行其后的行其后的行其后的行其后的shellshell命令命令命令命令listlist查查查查看指定文件或者函数的源代看指定文件或者函数的源代看指定文件或者函数的源代看指定文件或者函数的源代码码码码,并,并,并,并标标标标出行号出行号出行号出行号n n动态调试总结动态调试总结主要错误类型:主要错误类型:主要错误类型:
31、主要错误类型:n n算法错误;算法错误;算法错误;算法错误;n n输入错误;输入错误;输入错误;输入错误;定位方法:定位方法:定位方法:定位方法:n n设置断点;设置断点;设置断点;设置断点;n n单步步进执行;单步步进执行;单步步进执行;单步步进执行;n n查看变量取值变化;查看变量取值变化;查看变量取值变化;查看变量取值变化;n n反复执行,逐步缩小错误范围;反复执行,逐步缩小错误范围;反复执行,逐步缩小错误范围;反复执行,逐步缩小错误范围;总结总结n ngcc简介简介n ngcc编译器的用法和执行过程编译器的用法和执行过程n nmake命令和命令和makefile的结构的结构n ngdb调试程序调试程序