第12节Linux编程环境与开发工具.ppt
《第12节Linux编程环境与开发工具.ppt》由会员分享,可在线阅读,更多相关《第12节Linux编程环境与开发工具.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LinuxLinux基础基础Linux编程环境与开发工具编程环境与开发工具大理学院数学与计算机学院大理学院数学与计算机学院硬件教研室硬件教研室赵贵文赵贵文第十 节教学目的和要求教学目的和要求 学会学会GNU风格与风格与Linux内核编程风格内核编程风格了解了解GCC及及执行过程及及执行过程掌握使用掌握使用GNUmake编辑编辑makefile文件文件了解了解GDB命令的基本使用命令的基本使用学会如何创建一个学会如何创建一个shell脚本程序脚本程序掌握掌握shell程序的基本语法结构与应用程序的基本语法结构与应用shell的基本语句的基本语句掌握掌握LinuxC语言的基本编程思想与基本语言的基
2、本编程思想与基本框架、编译过程框架、编译过程第十 节重点内容重点内容 GCC及及执行过程及及执行过程GNUmake编辑编辑makefile文件文件LinuxC语言的基本编程思想与基本框语言的基本编程思想与基本框架、编译过程架、编译过程第十 节Linux编程编程 Linux软件开发一直在软件开发一直在Internet环境下环境下讲讲行。这个环境是行。这个环境是全球性全球性的,编程人员来自世界的,编程人员来自世界各地。只要能够访问各地。只要能够访问Web站点,就可以启动一站点,就可以启动一个以个以Linux为基础的软件项目。为基础的软件项目。Linux开发工开发工作经常是在作经常是在Linux用户
3、决定共同完成一个项目用户决定共同完成一个项目时开始的。当开发工作完成后,该软件就被放时开始的。当开发工作完成后,该软件就被放到到Internet站点上,站点上,任何用户都可以访问和下任何用户都可以访问和下载它载它。由于这个活跃的开发环境,新的以。由于这个活跃的开发环境,新的以Linux为基础的软件功能日益强大,而且呈现为基础的软件功能日益强大,而且呈现爆炸式的增长态势。爆炸式的增长态势。第十 节Linux编程编程 大多数大多数Linux软件是经过软件是经过自由软件基金会自由软件基金会(FreeSoftwareFoundation)提供的)提供的GNU(GNU即即GNUsnotUNIX)公开)公
4、开认证授权的,因而通常被称作认证授权的,因而通常被称作GNU软件。软件。GNU软件软件免费免费提供给用户使用,并被证明提供给用户使用,并被证明是非常可靠和高效的。许多流行的是非常可靠和高效的。许多流行的Linux实用程序如实用程序如C编译器、编译器、shell和编辑器都是和编辑器都是GNU软件应用程序。软件应用程序。Linux程序需要首先转化为程序需要首先转化为低级机器语言低级机器语言即所谓的即所谓的二进制代码二进制代码以后,才能被操作系以后,才能被操作系统执行。统执行。第十 节GNU计划的实用程序计划的实用程序GNU(它代表它代表GNUisnotUNIX)是由是由Richardstallma
5、n开发的一个与开发的一个与UNIX兼兼容的软件系统。容的软件系统。GNU软件免费提供给用软件免费提供给用户使用,并被证明是非常户使用,并被证明是非常可靠可靠和和高效高效的。的。GNU计划包括计划包括上百个命令、工具和上百个命令、工具和工具的集合,以及文档工具的集合,以及文档。可以说如果没。可以说如果没有上百位的编程者用他们的时间和精力有上百位的编程者用他们的时间和精力开发这些程序,开发这些程序,RedHatLinux不会像现不会像现在拥有这么丰富的内容。在拥有这么丰富的内容。第十 节GNU计划软件内容计划软件内容GNU计划的实用程序分布在多计划的实用程序分布在多个部分中。个部分中。bin实用程
6、序、实用程序、diff实用实用程序以及程序以及shar(shellarchive)实用实用程序主要用于开发工作;最常用的程序主要用于开发工作;最常用的实用程序是实用程序是文件实用程序、查找实文件实用程序、查找实用程序、用程序、shell实用程序以及文本实用程序以及文本实用程序实用程序。第十 节GNU风格风格(1)函数)函数返回类型说明返回类型说明和和函数名函数名分两行放置,函数分两行放置,函数起始字符起始字符和函数和函数开头开头左花括号放到最左边。左花括号放到最左边。(2)尽量不要让两个)尽量不要让两个不同优先级不同优先级的操作符出现在相的操作符出现在相同的对齐方式中,应该附加额外的括号使得代
7、码缩进同的对齐方式中,应该附加额外的括号使得代码缩进可以表示出嵌套。可以表示出嵌套。(3)每个程序都应该以一段简短的说明其功能的)每个程序都应该以一段简短的说明其功能的注注释开头释开头。(4)请为)请为每个函数书写注释每个函数书写注释,说明函数是做什么的,说明函数是做什么的,需要哪些入口参数,参数可能值的含义和用途。如果需要哪些入口参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西,或者可能导致函数不用了非常见的、非标准的东西,或者可能导致函数不能工作的任何可能的值,应该进行能工作的任何可能的值,应该进行特殊说明特殊说明。如果存。如果存在重要的返回值,也需要说明。在重要的返回值,也需
8、要说明。第十 节GNU风格风格(5)不要声明多个变量时跨行,)不要声明多个变量时跨行,每一行都以一个新的每一行都以一个新的声明开头声明开头。(6)当一个)当一个if中嵌套了另一个中嵌套了另一个if-else时,应用时,应用花括号花括号把把if-else括起来。括起来。(7)要在同一个声明中同时说明结构标识和变量或者)要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义结构标识和类型定义(typedef)。先定义变量,再使用先定义变量,再使用。(8)尽量避免在)尽量避免在if的条件中进行赋值。的条件中进行赋值。(9)请在名字中使用下划线以分割单词,尽量使用)请在名字中使用下划线以分割单词
9、,尽量使用小小写写;把;把大写字母留给宏和枚举常量大写字母留给宏和枚举常量,以及根据统一惯例,以及根据统一惯例使用的前缀。例如,应该使用类似使用的前缀。例如,应该使用类似ignore_space_change_flag的名字;不要使用类似的名字;不要使用类似iCantReadThis的名字。的名字。(10)用于表明一个命令行选项是否给出的变量应该)用于表明一个命令行选项是否给出的变量应该在选项含义的说明之在选项含义的说明之后后,而不是选项字符之后被命名。,而不是选项字符之后被命名。第十 节Linux 内核编程风格内核编程风格(1)Linux内核缩进风格是内核缩进风格是8个字符。个字符。(2)L
10、inux内核风格采用内核风格采用K&R标准,将开始的标准,将开始的大括号放在一行的最后,而将结束的大括号放在大括号放在一行的最后,而将结束的大括号放在一行的第一位一行的第一位。(3)命名尽量简洁。不应该使用诸如)命名尽量简洁。不应该使用诸如ThisVariableIsATemporaryCounter之类的名字。之类的名字。应该命名为应该命名为tmp,这样容易书写,也不难理解。,这样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名方式,但是命名全局变量,就应该用描述性命名方式,例如应该命名例如应该命名“count_active_users()”,而不是,而不是“cntusr()”。本
11、地变量应该避免过长本地变量应该避免过长。第十 节Linux 内核编程风格内核编程风格(4)函数最好短小精悍,一般来说不要让)函数最好短小精悍,一般来说不要让函数的参数多于函数的参数多于10个,否则应该尝试分解这个个,否则应该尝试分解这个过于复杂的函数。过于复杂的函数。(5)通常情况,注释说明代码的)通常情况,注释说明代码的功能功能,而而不是其实现原理不是其实现原理。避免把注释插到函数体内,。避免把注释插到函数体内,而写到函数前面,说明其功能,如果这个函数而写到函数前面,说明其功能,如果这个函数的确很复杂,其中需要有部分注释,可以写些的确很复杂,其中需要有部分注释,可以写些简短的注释来说明那些重
12、要的部分,但是不能简短的注释来说明那些重要的部分,但是不能过多。过多。第十 节编程环境编程环境各种编程语言或各种编程语言或shell程序脚本的源代码文件程序脚本的源代码文件可以用任何一种文本编辑器打开和编辑。一般可以用任何一种文本编辑器打开和编辑。一般来说,在来说,在Linux开发程序有两个主要的编辑器开发程序有两个主要的编辑器vi或者或者vim,还有,还有Emacs。这些文本编辑器如。这些文本编辑器如何选择?可以都试试看,然后选择自己喜欢的何选择?可以都试试看,然后选择自己喜欢的.反正它们都可以输入文本,都可以生成源代码反正它们都可以输入文本,都可以生成源代码.第十 节GCC简介简介Linu
13、x系统下的系统下的GCC(GNUCCompiler)是是GNU推出的功能强大、性能优越的推出的功能强大、性能优越的多平台编译多平台编译器器,是,是GNU的代表作品之一。的代表作品之一。GCC是可以在是可以在多种硬体平台上编译出可执行程序的多种硬体平台上编译出可执行程序的超级编译超级编译器器,其执行效率与一般的编译器相比平均效率,其执行效率与一般的编译器相比平均效率要高要高20%30%。GCC这个编译器稳定,而且文档齐全,大部这个编译器稳定,而且文档齐全,大部分的自由软件都是用他编译的。如果使用分的自由软件都是用他编译的。如果使用C,那么就可以选择那么就可以选择GCC。本节主要介绍这种编译。本节
14、主要介绍这种编译器的基本原理和使用方法,以及编译过程中所器的基本原理和使用方法,以及编译过程中所产生的错误的原因及对策。产生的错误的原因及对策。第十 节GCC的执行过程的执行过程虽然称虽然称GCC是是C语言的编译器,但使用语言的编译器,但使用GCC由由C语言语言源代码文件生成可执行文件的过程不仅仅是编译的过源代码文件生成可执行文件的过程不仅仅是编译的过程,而且要经历程,而且要经历4个相互关联的步骤:个相互关联的步骤:预处理预处理(也称预也称预编译,编译,preprocessing)、编译编译(compilation)、汇编汇编(assembly)和和链接链接(linking)。gcc可以使程序
15、员灵活地控制编译过程。编译过程一可以使程序员灵活地控制编译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调用不同的般可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理,如图所示。工具进行处理,如图所示。预处理预处理链接链接编译编译组译组译源程序源程序(*.c)(*.c)可执行文件可执行文件预处理器预处理器编译器编译器组译器组译器连接器连接器第十 节gcc的版本信息的版本信息一般来说,系统安装后就已经安装和设定好了一般来说,系统安装后就已经安装和设定好了gcc。在在shell的提示符下键入的提示符下键入gccv,屏幕上就会显示出目,屏幕上就会显示出目前正在使用的前正在使用的gcc的版
16、本,同时这可以确定系统所支的版本,同时这可以确定系统所支持的是持的是ELF还是还是a.out可执行文件格式。可执行文件格式。Linux系统中可执行文件有两种格式。第一种格式是系统中可执行文件有两种格式。第一种格式是a.out格式,这种格式用于早期的格式,这种格式用于早期的Linux系统以及系统以及Unix系统的原始格式。系统的原始格式。a.out来自于来自于UnixC编译程序默认的编译程序默认的可执行文件名。当使用共享库时,可执行文件名。当使用共享库时,a.out格式就会发生格式就会发生问题。把问题。把a.out格式调整为共享库是一种非常复杂的操格式调整为共享库是一种非常复杂的操作,由于这个原
17、因,一种新的文件格式被引入作,由于这个原因,一种新的文件格式被引入Unix系系统统5的第四版本和的第四版本和Solaris系统中。它被称为系统中。它被称为可执行和可执行和连接连接的格式(的格式(ELF)。这种格式很容易实现共享库。)。这种格式很容易实现共享库。第十 节gcc的使用的使用在使用在使用GCC编译器的时候,必须给出一系列必要的编译器的时候,必须给出一系列必要的调用参数和文件名称。调用参数和文件名称。GCC编译器的调用参数大约有编译器的调用参数大约有100多个,其中多数参数可能根本就用不到,这里只多个,其中多数参数可能根本就用不到,这里只介绍其中介绍其中最基本、最常用最基本、最常用的参
18、数。的参数。gcc的使用格式如下:的使用格式如下:$gccoptionsfilenames其中其中filenames为所要编译的程序源文件。为所要编译的程序源文件。当使用当使用gcc时,时,gcc会完成会完成预处理、编译、汇编和连预处理、编译、汇编和连接接。前三步分别生成。前三步分别生成目标文件目标文件,连接时,把生成的目,连接时,把生成的目标文件链接成标文件链接成可执行文件可执行文件。gcc可以针对支持不同的可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来源程序文件进行不同处理,文件格式以文件的后缀来识别。识别。第十 节使用优化选项使用优化选项当用当用gcc编译编译C代码时,
19、它会试着用最少的时代码时,它会试着用最少的时间完成编译并且使编译后的代码易于调试间完成编译并且使编译后的代码易于调试.易于易于调试意味着编译后的代码与源代码有同样的执行调试意味着编译后的代码与源代码有同样的执行次序,编译后的代码没有经过优化。有很多选项次序,编译后的代码没有经过优化。有很多选项可用于告诉可用于告诉gcc,在,在耗费更多编译时间和牺牲易耗费更多编译时间和牺牲易调试性的基础调试性的基础上,产生更小更快的可执行文件。上,产生更小更快的可执行文件。这些选项中最典型的是这些选项中最典型的是-O和和-O2选项。选项。-O选项告诉选项告诉gcc对源代码进行对源代码进行基本优化基本优化。-O2
20、选项告诉选项告诉gcc产生产生尽可能小和尽可能快尽可能小和尽可能快的代的代码。码。-O2选项将使编译的选项将使编译的速度速度比使用比使用-O时时慢慢。但。但通常产生的通常产生的代码执行速度会更快代码执行速度会更快。第十 节使用调试和剖析选项使用调试和剖析选项GCC支持数种支持数种调试调试和和剖析剖析选项。在这些选项选项。在这些选项里最常用的是里最常用的是-g和和-pg选项。选项。-g选项告诉选项告诉gcc产生能被产生能被GNU调试器使用的调试器使用的调调试信息试信息以便调试程序。以便调试程序。gcc提供了一个很多其提供了一个很多其他他C编译器里没有的特性,在编译器里没有的特性,在gcc里能使里
21、能使-g和和-O(产生优化代码产生优化代码)连用。这一点非常有用,因为能连用。这一点非常有用,因为能在与最终产品尽可能相近的情况下调试代码。在与最终产品尽可能相近的情况下调试代码。同时使用这两个选项时必须清楚所写的某些代同时使用这两个选项时必须清楚所写的某些代码已经在优化时被码已经在优化时被gcc作了改动。作了改动。-pg选项告诉选项告诉gcc在程序里加入额外的代码,在程序里加入额外的代码,执行时,产生执行时,产生gprof用的剖析信息以显示用的剖析信息以显示程序的程序的耗时耗时情况。情况。第十 节GNU make的介绍的介绍make是所有想在是所有想在Unix/Linux系统上系统上编程的用
22、户必须掌握的工具。如果写的编程的用户必须掌握的工具。如果写的程序中没有用到程序中没有用到make,则说明写的程,则说明写的程序还只是个人的练习程序,不具有任何序还只是个人的练习程序,不具有任何实用的价值。也许这么界定过于严格,实用的价值。也许这么界定过于严格,但在任何稍具规模的程序中的确定应用但在任何稍具规模的程序中的确定应用到到make。第十 节使用使用GNU make编辑编辑makefile准备工作准备工作n要使用要使用make,必须编写一个叫做,必须编写一个叫做Makefile的文件,的文件,这个文件描述了软件包中文件之间的关系,提供更这个文件描述了软件包中文件之间的关系,提供更新每个文
23、件的命令。一般在一个软件包里,通常是新每个文件的命令。一般在一个软件包里,通常是可执行文件靠目标文件来更新,可执行文件靠目标文件来更新,目标文件靠编译源目标文件靠编译源文件来更新文件来更新。nMakefile写好之后,每次改变了某些源文件,只要写好之后,每次改变了某些源文件,只要执行执行make命令:命令:#maken所有必要的重新编译将执行。所有必要的重新编译将执行。Make程序利用程序利用makefile中的数据和每个文件的中的数据和每个文件的最后修改时间最后修改时间来确来确定那个文件需要更新,对于需要更新的文件,定那个文件需要更新,对于需要更新的文件,make程序执行程序执行makefi
24、le数据中定义的命令来更新。数据中定义的命令来更新。第十 节使用使用GNU make编辑编辑makefilemakefile文件的基本结构文件的基本结构GNUmake的主要功能是的主要功能是读读进一个文本文件进一个文本文件makefile并根据并根据makefile的内容执行一系列的工作。的内容执行一系列的工作。makefile的的默认文件名为默认文件名为GNUmakefile、makefile或或Makefile,当然也可以在当然也可以在make的命令行中指定别的文件名。如果的命令行中指定别的文件名。如果不特别指定,不特别指定,make命令在执行时将按命令在执行时将按顺序顺序查找默认的查找默
25、认的makefile文件。多数文件。多数Linux程序员使用第三种文件名程序员使用第三种文件名Makefile。因为。因为第一个字母是大写第一个字母是大写,通常被列在一个目,通常被列在一个目录的文件列表的录的文件列表的最前面最前面。Makefile是一个是一个文本形式文本形式的的数据库文件数据库文件,其中包含一,其中包含一些规则来告诉些规则来告诉make处理哪些文件以及如何处理这些文处理哪些文件以及如何处理这些文件。这些规则主要是描述哪些文件(称为件。这些规则主要是描述哪些文件(称为target目标文目标文件,不要和编译时产生的目标文件相混淆)是从哪些别件,不要和编译时产生的目标文件相混淆)是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 Linux 编程 环境 开发 工具
限制150内