Linux-GCC-G++编译器与调试器.ppt

上传人:豆**** 文档编号:24567449 上传时间:2022-07-05 格式:PPT 页数:25 大小:477KB
返回 下载 相关 举报
Linux-GCC-G++编译器与调试器.ppt_第1页
第1页 / 共25页
Linux-GCC-G++编译器与调试器.ppt_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《Linux-GCC-G++编译器与调试器.ppt》由会员分享,可在线阅读,更多相关《Linux-GCC-G++编译器与调试器.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、3.1 GCC/G+编译器编译器GCC是是GNU项目中的一个子项目,最初为用于编译项目中的一个子项目,最初为用于编译C语言的编译器。随着语言的编译器。随着GNU项目的发展,项目的发展,GCC已经成为了能已经成为了能编译编译C、C+、Ada、Object C和和Java等语言的等语言的GNU编译器编译器家族,同时还可执行跨硬件平台的交叉编译工作。家族,同时还可执行跨硬件平台的交叉编译工作。G+则是则是专门用来编写专门用来编写C和和C+语言的编译器。语言的编译器。C和和C+语言正在不断语言正在不断发展,为了保持兼容程序语言的最新特性,开发者通常选择发展,为了保持兼容程序语言的最新特性,开发者通常选

2、择GCC来编译来编译C语言编写的源代码,选择语言编写的源代码,选择G+来编译来编译C+源代源代码。码。3.1.1 GCC/G+编译器安装编译器安装安装或更新安装或更新GCC和和G+可在可在GNU项目的官方网站(项目的官方网站(www.gnu.org)去下载相应的安装包,也可以使用)去下载相应的安装包,也可以使用YUM软件软件包管理器安装。安装包管理器安装。安装GCC和和G+的命令如下:的命令如下:yum install make/ 安装安装make程序程序yum install gcc/ 安装安装GCC编译器编译器yum install gcc-c+/ 安装安装G+编译器编译器注意:如果安装过

3、程中提示需要选择编译器版本,可注意:如果安装过程中提示需要选择编译器版本,可根据当前硬件平台选择最新发布的版本。另外,如果提示需根据当前硬件平台选择最新发布的版本。另外,如果提示需要安装其他相关软件包,请一并安装。要安装其他相关软件包,请一并安装。3.1.2 GCC/G+编译命令编译命令GCC/G+编译器没有图形界面,只能在终端上以命令编译器没有图形界面,只能在终端上以命令方式运行。编译命令由命令名、选项和源文件名组成,格式方式运行。编译命令由命令名、选项和源文件名组成,格式如下所示:如下所示:gcc -选项选项 1 -选项选项 2-选项选项 n g+ -选项选项 1 -选项选项 2-选项选项

4、 n 命令名、选项和源文件名之间使用空格分隔,一行命命令名、选项和源文件名之间使用空格分隔,一行命令中可以有多个选项,也可以只有一个选项。文件名可以包令中可以有多个选项,也可以只有一个选项。文件名可以包含文件的绝对路径,也可以使用相对路径。如果文件名中不含文件的绝对路径,也可以使用相对路径。如果文件名中不包含路径,那么源文件被视为存在于工作目录中。如果命令包含路径,那么源文件被视为存在于工作目录中。如果命令中不包含输出的可执行文件名称,默认情况下将在工作目录中不包含输出的可执行文件名称,默认情况下将在工作目录中生成后缀为中生成后缀为“.out”的可执行文件。的可执行文件。3.1.3 GCC/G

5、+编译选项编译选项GCC拥有一百多个编译选项。对于拥有一百多个编译选项。对于C语言和语言和C+语言,语言,G+与与GCC的编译选项基本相同。常用的的编译选项基本相同。常用的GCC和和G+编译编译选项见表选项见表3.1所示:所示: 3.1.4 GCC/G+编译器执行过程编译器执行过程GCC和和G+编译器执行过程可总结为四步:预处理、编译器执行过程可总结为四步:预处理、编译、汇编、连接。在预处理过程中,编译器会对源代码中编译、汇编、连接。在预处理过程中,编译器会对源代码中的头文件和预处理语句进行分析,生成以的头文件和预处理语句进行分析,生成以“.i”为后缀的预处为后缀的预处理文件。理文件。3.2

6、程序和进程程序和进程程序和进程是操作系统中的重要概念,程序是可运行程序和进程是操作系统中的重要概念,程序是可运行的一组指令,程序以二进制代码的形式保存在存储设备中。的一组指令,程序以二进制代码的形式保存在存储设备中。操作系统运行程序后,该程序在内存中的映像就是进程,进操作系统运行程序后,该程序在内存中的映像就是进程,进程是活动的程序。程是活动的程序。3.2.1 程序程序程序是指一组指示计算机或其他具有信息处理能力设程序是指一组指示计算机或其他具有信息处理能力设备每一步动作的指令。备每一步动作的指令。Linux系统下的应用程序主要由两种系统下的应用程序主要由两种特殊类型的文件代表,分别是可执行文

7、件和脚本程序。可执特殊类型的文件代表,分别是可执行文件和脚本程序。可执行文件是能够被计算机直接执行的程序,相当于行文件是能够被计算机直接执行的程序,相当于Windows系系统中的统中的exe文件。使用文件。使用C和和C+语言设计的程序编译后即是可语言设计的程序编译后即是可执行文件。执行文件。Linux系统不要求可执行文件使用特定的扩展名系统不要求可执行文件使用特定的扩展名,文件是否能被执行由文件的系统属性来决定。,文件是否能被执行由文件的系统属性来决定。3.2.2 进程和进程和PID进程是一个具有独立功能的程序关于某个数据集合的进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运

8、行活动,是处于活动状态的程序。进一次可以并发执行的运行活动,是处于活动状态的程序。进程作为构成系统的基本元件,不仅是系统内部独立运行的实程作为构成系统的基本元件,不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。体,而且是独立竞争资源的实体。在在Linux系统中,用户创建进程时会先在系统的进程表系统中,用户创建进程时会先在系统的进程表中为进程创建独一无二的编码,即中为进程创建独一无二的编码,即PID。PID是一个正整数是一个正整数,取值范围在,取值范围在2到到32768之间。进程创建时会顺序挑选下一个之间。进程创建时会顺序挑选下一个未使用的编号数字作为自己的未使用的编号数字作为自己的PI

9、D,如果他们已经经过一圈,如果他们已经经过一圈的循环,新的编码重新从的循环,新的编码重新从2开始。数字开始。数字1一般是为特殊进程一般是为特殊进程init保留的,它负责管理其他的进程。保留的,它负责管理其他的进程。 3.3 ANSI C标准标准C语言诞生后的很长一段时期内,并没有针对语言诞生后的很长一段时期内,并没有针对C语言制语言制定严格的标准。不同编译器可能使用不同的语法规则或数据定严格的标准。不同编译器可能使用不同的语法规则或数据结构,此状况对程序的移植带来很多麻烦。于是,美国国家结构,此状况对程序的移植带来很多麻烦。于是,美国国家标准协会(标准协会(ANSI)决定统一)决定统一C语言的

10、标准,并于语言的标准,并于1989年颁布年颁布ANSX3.159-1989标准文档,这一标准被称为标准文档,这一标准被称为ANSI C标标准。准。ANSI C标准在订立时吸取了很多标准在订立时吸取了很多C+语言的内容,同语言的内容,同时促使时促使C语言支持多国字符集,其中包括各种中文字符集。语言支持多国字符集,其中包括各种中文字符集。ANSI C标准的推出使标准的推出使C语言保持着活力,成为最受开发者欢语言保持着活力,成为最受开发者欢迎的开发语言。迎的开发语言。3.3.1 函数原型函数原型函数原型由函数的返回类型、函数名和参数三部分组函数原型由函数的返回类型、函数名和参数三部分组成。例如第一行

11、中成。例如第一行中ssize_t表示该函数返回值是表示该函数返回值是ssize_t类型的类型的数值。括号中是参数列表,多个参数用逗号分隔,代码中最数值。括号中是参数列表,多个参数用逗号分隔,代码中最后一行后一行getpid()函数的参数是函数的参数是void,表示,表示getpid函数没有参数函数没有参数。源代码编译时,因为编译器已经知道参数的类型,所以会。源代码编译时,因为编译器已经知道参数的类型,所以会将调用的参数进行强制转换。将调用的参数进行强制转换。3.3.2 类属指针类属指针类属指针是一种能够同时支持所有数据类型的指针,类属指针是一种能够同时支持所有数据类型的指针,函数原型中常用的函

12、数原型中常用的“void *”类型即是类属指针。类型即是类属指针。ANSI C标标准常用类属指针代替函数参数中的其它指针,使同一个函数准常用类属指针代替函数参数中的其它指针,使同一个函数能支持多种数据类型。相关内容将来本书的程序实例中多次能支持多种数据类型。相关内容将来本书的程序实例中多次见到。见到。3.3.3 原始系统数据类型原始系统数据类型在函数原型中以在函数原型中以“_t”结尾的类型被称为原始系统数据结尾的类型被称为原始系统数据类型。原始系统数据类型定义在头文件类型。原始系统数据类型定义在头文件“sys/types.h”中,以中,以typedef操作符加以定义。原始系统数据类型是目标系统

13、数据操作符加以定义。原始系统数据类型是目标系统数据结构的接口,在不同的操作系统中,其字长会有变化。结构的接口,在不同的操作系统中,其字长会有变化。3.4 编译编译hello worldhello world程序作为程序员学习的第一个程序已成为有程序作为程序员学习的第一个程序已成为有趣的惯例。本节将讲述如何使用趣的惯例。本节将讲述如何使用Linux系统中默认的编译器系统中默认的编译器编辑该程序的源代码,并使用编辑该程序的源代码,并使用GCC编译器将该程序编译为编译器将该程序编译为可执行文件。可执行文件。3.4.1 使用使用VI编写源代码编写源代码VI是是Linux系统中最常用的文本编辑器,几乎所

14、有系统中最常用的文本编辑器,几乎所有Linux发行版中都已包含发行版中都已包含VI程序。它工作在控制台或终端中程序。它工作在控制台或终端中,通过,通过shell调用,全部操作均由命令完成,对于初学者来说调用,全部操作均由命令完成,对于初学者来说并不容易掌握。并不容易掌握。3.4.2 程序的编译与连接程序的编译与连接程序经过编译器的编译与连接后,即可生成可执行文程序经过编译器的编译与连接后,即可生成可执行文件。如果源代码有语法错误,则会在终端上显示错误信息。件。如果源代码有语法错误,则会在终端上显示错误信息。有些时候,编译器会出现警告提示,但程序依然被编译成功有些时候,编译器会出现警告提示,但程

15、序依然被编译成功。这表明源代码没有严格按照标准编写,可能会在运行时出。这表明源代码没有严格按照标准编写,可能会在运行时出现意外的结果。继续前面的操作不改变工作目录,编译并连现意外的结果。继续前面的操作不改变工作目录,编译并连接接“helloworld.c”程序,可在终端上输入下列命令:程序,可在终端上输入下列命令:gcc -o helloworld helloworld.c/ 编译并连接程序编译并连接程序/“-o helloworld”表示使用表示使用“helloworld”作为目标文件作为目标文件名名3.4.3 使用终端运行程序使用终端运行程序Linux系统上运行程序,必须给出该程序完整的路

16、径。系统上运行程序,必须给出该程序完整的路径。前面的前面的“helloworld.c”文件建立在文件建立在“/home/用户名用户名/helloworld”目录中,编译和连接后所生成的可执行文件也目录中,编译和连接后所生成的可执行文件也在该目录中。运行程序则需输入在该目录中。运行程序则需输入“/home/用户名用户名/helloworld/helloworld”。但当前的工作目录已经是。但当前的工作目录已经是“/home/用户名用户名/helloworld”了,所以可用了,所以可用“./”替代工作目录的路径替代工作目录的路径。3.5 GDB调试器调试器程序编写后难免会出现各种错误,当程序完成编

17、译时程序编写后难免会出现各种错误,当程序完成编译时,隐藏的错误可能会使程序无法正常运行,或者不能实现预,隐藏的错误可能会使程序无法正常运行,或者不能实现预期的功能。简单的程序或浅显的错误可依赖程序员的经验判期的功能。简单的程序或浅显的错误可依赖程序员的经验判断出故障点,但现在的软件规格越来越大,调试起来也就越断出故障点,但现在的软件规格越来越大,调试起来也就越来越困难。调试器是帮助程序员修改错误的得力工具,常用来越困难。调试器是帮助程序员修改错误的得力工具,常用的断点、单步跟踪等功能可快速找到故障点。的断点、单步跟踪等功能可快速找到故障点。3.5.1 GDB调试器概述调试器概述Linux程序员

18、中最常用的调试工具是程序员中最常用的调试工具是GDB,GDB调试器调试器是是GNU项目的子项目。该程序提供了所有常用调试功能,项目的子项目。该程序提供了所有常用调试功能,是是Linux系统中最为简单快捷的调试工具。由于当前图形用系统中最为简单快捷的调试工具。由于当前图形用户界面(户界面(GUI)普及,大量基于)普及,大量基于GUI的调试器被开发和运行的调试器被开发和运行在在Linux上。他们大多是以上。他们大多是以GDB为核心配上为核心配上GUI:用户通过:用户通过GUI发出命令,这些命令依次被传送给发出命令,这些命令依次被传送给GDB。其中一个是。其中一个是DDD,意为数据显示调试器。在一些

19、集成开发环境如,意为数据显示调试器。在一些集成开发环境如Eclipse中,也提供了调试功能,并且以中,也提供了调试功能,并且以GDB为核心。为核心。3.5.2 GDB调试器安装调试器安装通常在通常在Linux桌面版的软件开发包集合中已包含桌面版的软件开发包集合中已包含GDB调调试器,如果需要安装或更新试器,如果需要安装或更新GDB调试器,可使用调试器,可使用YUM软件软件包管理器完成,操作方法如下:包管理器完成,操作方法如下:yum install gdb/ YUM安装安装GDB调试器调试器3.5.3 GDB常用调试命令常用调试命令GDB调试器调试的对象是可执行文件,使用调试器调试的对象是可执

20、行文件,使用GCC或或G+编译编译器编译源代码时,必须加上选项器编译源代码时,必须加上选项“-g”才能使目标可执行文件包含才能使目标可执行文件包含可被调试的信息。可被调试的信息。3.5.4 在在GDB下运行程序下运行程序打开可执行文件后,可根据需要在程序中加入断点或打开可执行文件后,可根据需要在程序中加入断点或观察点,并运行程序,以观察点,并运行程序,以“helloworld”程序为例,可在为变程序为例,可在为变量赋值前加入断点,并运行程序。继续上一小节的操作,方量赋值前加入断点,并运行程序。继续上一小节的操作,方法如下:法如下:(gdb) break 5/ 在源代码第在源代码第5行,即变量行

21、,即变量c赋赋值处加入断点值处加入断点(gdb) run/ 运行程序运行程序3.5.5 检查数据检查数据在程序中加入断点后,程序运行时会在断点处暂时停在程序中加入断点后,程序运行时会在断点处暂时停止,以便检查程序中的数据。通过检查数据可判断出许多种止,以便检查程序中的数据。通过检查数据可判断出许多种错误的所在。错误的所在。“helloworld”程序在第程序在第5行加入了断点,这时行加入了断点,这时第第5行的代码并未执行。检查常量行的代码并未执行。检查常量c的值可输入下列命令:的值可输入下列命令:(gdb) print c/ 显示变量显示变量c的值的值3.6 小结小结本章介绍了本章介绍了Lin

22、ux系统下编译系统下编译C和和C+语言的编译器语言的编译器GCC和和G+的基本概念及操作,他们与文本编辑器的基本概念及操作,他们与文本编辑器VI的结的结合,组成了最简单的程序开发环境。另外,本章讲解了程序合,组成了最简单的程序开发环境。另外,本章讲解了程序和进程的概念,程序是编程工作的结果,进程是程序运行时和进程的概念,程序是编程工作的结果,进程是程序运行时在系统上的映射。在系统上的映射。GCC和和G+编译器是遵循编译器是遵循ANSI C标准所标准所设计的,所以本章也简单介绍了设计的,所以本章也简单介绍了ANSI C的概念,当深入学的概念,当深入学习习C语言时,对语言时,对ANSI C标准的了解会避免许多程序错误的产标准的了解会避免许多程序错误的产生。本章的最后介绍了生。本章的最后介绍了GDB调试器,读者还需要在学习中调试器,读者还需要在学习中不断摸索该工具的操作方法。不断摸索该工具的操作方法。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁