第6讲 Linux编程基础.ppt
《第6讲 Linux编程基础.ppt》由会员分享,可在线阅读,更多相关《第6讲 Linux编程基础.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系第第2单元单元Linux操作系统的安装、使用及用户接口操作系统的安装、使用及用户接口Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系第第6讲讲 Linux程序设计基础程序设计基础 Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系6.1 概述概述 uLinux软件开发一直在软件开发一直在Internet环境下讲行。这个环境是环境下讲行。这个环境是全球性的,编程人员来自世界各地。全球性的,编程人员来自世界各地
2、。uLinux开发工作完成后,该软件就被放到开发工作完成后,该软件就被放到Internet站点上,站点上,任何用户都可以访问和下载它。任何用户都可以访问和下载它。u由于这个活跃的开发环境,新的以由于这个活跃的开发环境,新的以Linux为基础的软件功为基础的软件功能日益强大,而且呈现爆炸式的增长态势。能日益强大,而且呈现爆炸式的增长态势。u大大多多数数Linux软软件件是是经经过过自自由由软软件件基基金金会会提提供供的的GNU公公开认证授权的,因而通常被称作开认证授权的,因而通常被称作GNU软件。软件。u许许多多流流行行的的Linux实实用用程程序序如如C编编译译器器、shell和和编编辑辑器器
3、都都是是GNU软件应用程序。软件应用程序。Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系uLinux程序需要首先转化为低级机器语言即所谓程序需要首先转化为低级机器语言即所谓的二进制代码以后,才能被操作系统执行。的二进制代码以后,才能被操作系统执行。u例如编程时,先用普通的编程语言生成一系列例如编程时,先用普通的编程语言生成一系列指令,这些指令可被翻译为适当的可执行应用程指令,这些指令可被翻译为适当的可执行应用程序的二进制代码。序的二进制代码。u这个翻译过程可由解释器一步步来完成,或者这个翻译过程可由解释器一步步来完成,或者也可以由编译器明确地完
4、成。也可以由编译器明确地完成。6.1 概述概述 Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系6.2 使用使用GNU cc开发应用程序开发应用程序 6.2.1使用使用GNUcc1gcc的简介的简介gcc可以使程序员灵活地控制编译过程。编译过程一般可以使程序员灵活地控制编译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调用不同的工具进可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理,如图所示。行处理,如图所示。Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系2gcc的使用的使用gcc的
5、使用格式如下:的使用格式如下:$gccoptionsfilenames其中其中filenames为所要编译的程序源文件。为所要编译的程序源文件。当使用当使用gcc时,时,gcc会完成预处理、编译、汇编和连接。会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链前三步分别生成目标文件,连接时,把生成的目标文件链接成可执行文件。接成可执行文件。gcc可以针对支持不同的源程序文件进行可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别。不同处理,文件格式以文件的后缀来识别。6.2.1 使用使用GNU ccNeusoft Institute of Info
6、rmation嵌入式系统工程系嵌入式系统工程系3使用优化选项使用优化选项当当用用gcc编编译译C代代码码时时,它它会会试试着着用用最最少少的的时时间间完完成成编编译译并并且且使使编编译译后后的的代代码码易易于于调调试试。易易于于调调试试意意味味着着编编译译后后的的代代码码与与源源代代码码有有同同样样的的执执行行次次序序,编编译译后后的的代代码码没没有有经经过过优优化化。有有很很多多选选项项可可用用于于告告诉诉gcc,在在耗耗费费更更多多编编译译时时间间和和牺牺牲牲易易调调试试性性的的基基础础上上,产产生生更更小小更快的可执行文件。这些选项中最典型的是更快的可执行文件。这些选项中最典型的是-O和
7、和-O2选项。选项。-O选选项项告告诉诉gcc对对源源代代码码进进行行基基本本优优化化。这这些些优优化化在在大大多多数数情情况下都会使程序执行的更快。况下都会使程序执行的更快。-O2选选项项告告诉诉gcc产产生生尽尽可可能能小小和和尽尽可可能能快快的的代代码码。-O2选选项项将将使使编编译译的的速速度度比比使使用用-O时时慢慢。但但通通常常产产生生的的代代码码执执行行速速度度会会更更快。快。6.2.1 使用使用GNU ccNeusoft Institute of Information嵌入式系统工程系嵌入式系统工程系4使用调试和剖析选项使用调试和剖析选项GCC支支持持数数种种调调试试和和剖剖析
8、析选选项项。在在这这些些选选项项里里最最常常用用的的是是-g和和-pg选项。选项。-g选选项项告告诉诉gcc产产生生能能被被GNU调调试试器器使使用用的的调调试试信信息息以以便便调调试试程程序序。在在gcc里里能能使使-g和和-O(产产生生优优化化代代码码)连连用用。同同时时使使用用这这两两个个选选项时必须清楚所写的某些代码已经在优化时被项时必须清楚所写的某些代码已经在优化时被gcc作了改动。作了改动。-pg选选项项告告诉诉gcc在在程程序序里里加加入入额额外外的的代代码码,执执行行时时,产产生生gprof用用的剖析信息以显示程序的耗时情况。的剖析信息以显示程序的耗时情况。6.2.1 使用使用
9、GNU ccNeusoft Institute of Information嵌入式系统工程系嵌入式系统工程系6.2.2 使用使用GNU make编辑编辑makefile 1准备工作准备工作要要使使用用make,必必须须编编写写一一个个叫叫做做makefile的的文文件件,这这个个文文件件描描述述了了软软件件包包中中文文件件之之间间的的关关系系,提提供供更更新新每每个个文文件件的的命命令令。一一般般在在一一个个软软件件包包里里,通通常常是是可可执执行行文文件件靠靠目目标标文文件件来来更更新新,目目标标文文件件靠靠编编译译源源文文件件来来更新。更新。makefile写好之后,每次改变了某些源文件,
10、只要执行写好之后,每次改变了某些源文件,只要执行make命令:命令:#make所所有有必必要要的的重重新新编编译译将将执执行行。make程程序序利利用用makefile中中的的数数据据和和每每个个文文件件的的最最后后修修改改时时间间来来确确定定哪哪个个文文件件需需要要更更新新,对对于于需需要要更更新新的的文文件件,make程序执行程序执行makefile数据中定义的命令来更新。数据中定义的命令来更新。Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系2makefile文件的基本结构文件的基本结构GNU make的的主主要要功功能能是是读读进进一一个
11、个文文本本文文件件makefile并并根根据据makefile的的 内内 容容 执执 行行 一一 系系 列列 的的 工工 作作。makefile的的 默默 认认 文文 件件 名名 为为GNUmakefile、makefile或或Makefile,当当然然也也可可以以在在make的的命命令令行行中中指指定定别别的的文文件件名名。如如果果不不特特别别指指定定,make命命令令在在执执行行时时将将按按顺顺序序查查找找默默认认的的makefile文文件件。多多数数Linux程程序序员员使使用用第第三三种种文文件件名名Makefile。因因为为第第一个字母是大写,通常被列在一个目录的文件列表的最前面。一
12、个字母是大写,通常被列在一个目录的文件列表的最前面。Makefile是是一一个个文文本本形形式式的的数数据据文文件件,其其中中包包含含一一些些规规则则来来告告诉诉make处处理理哪哪些些文文件件以以及及如如何何处处理理这这些些文文件件。这这些些规规则则主主要要是是描描述述哪哪些些文文件件(称称为为target目目标标文文件件,不不要要和和编编译译时时产产生生的的目目标标文文件件相相混混淆淆)是是从从哪哪些些别别的的文文件件(称称为为dependency依依赖赖文文件件)中中产产生生的的,以以及及用用什什么么命命令令(command)来执行这个过程。)来执行这个过程。6.2.2 使用使用GNU
13、make编辑编辑makefile Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系依依靠靠这这些些信信息息,make会会对对磁磁盘盘上上的的文文件件进进行行检检查查,如如果果目目标标文文件件的的生生成成或或被被改改动动时时的的时时间间(称称为为该该文文件件时时间间戳戳)至至少少比比它它的的一一个个依依赖赖文文件件还还旧旧的的话话,make就就执执行行相相应应的的命命令令,以以更更新新目目标标文文件件。目目标标文文件件不不一一定定是是最最后后的的可可执执行行文件,可以是任何一个中间文件并可以作为其他目标文件的依赖文件。文件,可以是任何一个中间文件并
14、可以作为其他目标文件的依赖文件。一个一个Makefile文件主要含有一系列的规则,每条规则包含以下内容:文件主要含有一系列的规则,每条规则包含以下内容:一一个个目目标标(target),即即make最最终终需需要要创创建建的的文文件件,如如可可执执行行文文件件和和目目标标文件;目标也可以是要执行的动作,如文件;目标也可以是要执行的动作,如“clean”。一一个个或或多多个个依依赖赖文文件件(dependency)列列表表,通通常常是是编编译译目目标标文文件件所所需需要要的其他文件。的其他文件。一一系系列列命命令令(command),是是make执执行行的的动动作作,通通常常是是把把指指定定的的
15、相相关关文文件件编编译译成成目目标标文文件件的的编编译译命命令令,每每个个命命令令占占一一行行,且且每每个个命命令令行行的的起起始始字字符符必必须须为为TAB字符。字符。6.2.2 使用使用GNU make编辑编辑makefile Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系6.2.2 使用使用GNU make编辑编辑makefile 除除非非特特别别指指定定,否否则则make的的工工作作目目录录就就是是当当前前目目录录。target是是需需要要创创建建的的二二进进制制文文件件或或目目标标文文件件,dependency是是在在创创建建targ
16、et时时需需要要用用到到的的一一个个或或多多个个文文件件的的列列表表,命命令令序序列是创建列是创建target文件所需要执行的步骤,比如编译命令。文件所需要执行的步骤,比如编译命令。Makefile规则的一般形式如下:规则的一般形式如下:target:dependencydependency(tab)Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系例如,有以下的例如,有以下的Makefile文件:文件:#一个简单的一个简单的Makefile的例子的例子(以(以#开头的为注释行)开头的为注释行)test:prog.ocode.ogccotestpr
17、og.ocode.oprog.o:prog.cprog.hcode.hgcccprog.coprog.ocode.o:code.ccode.hgccccode.cocode.oclean:rmf*.o6.2.2 使用使用GNU make编辑编辑makefile Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系上上面面的的Makefile文文件件中中共共定定义义了了四四个个目目标标:test、prog.o、code.o和和clean。目目标标从从每每行行的的最最左左边边开开始始写写,后后面面跟跟一一个个冒冒号号(:),如如果果有有与与这这个个目目标
18、标有有依依赖赖性性的的其其他他目目标标或或文文件件,把把它它们们列列在在冒冒号号后后面面,并并以以空空格格隔隔开开。然然后后另另起起一一行行开开始始写写实实现现这这个个目目标标的的一一组组命命令令。在在Makefile中中,可可使使用用续续行行号号()将将一一个个单单独独的的命命令令行行延延续续成成几几行行。但但要要注注意意在在续续行行号号()后后面面不不能能跟跟任任何何字字符符(包包括括空格和键)。空格和键)。一般情况下,调用一般情况下,调用make命令可输入:命令可输入:#maketargettarget是是Makefile文文件件中中定定义义的的目目标标之之一一,如如果果省省略略targ
19、et,make就就将将生生成成Makefile文文件件中中定定义义的的第第一一个个目目标标。对对于于上上面面Makefile的的例例子子,单单独独的的一一个个“make”命令等价于:命令等价于:#maketest因因为为test是是Makefile文文件件中中定定义义的的第第一一个个目目标标,make首首先先将将其其读读入入,然然后后从从第第一一行行开开始始执执行行,把把第第一一个个目目标标test作作为为它它的的最最终终目目标标,所所有有后后面面的的目目标标的的更更新新都都会会影影响响到到test的的更更新新。第第一一条条规规则则说说明明只只要要文文件件test的的时时间间戳戳比比文文件件p
20、rog.o或或code.o中的任何一个旧,下一行的编译命令将会被执行。中的任何一个旧,下一行的编译命令将会被执行。6.2.2 使用使用GNU make编辑编辑makefile Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系但但是是,在在检检查查文文件件prog.o和和code.o的的时时间间戳戳之之前前,make会会在在下下面面的的行行中中寻寻找找以以prog.o和和code.o为为目目标标的的规规则则,在在第第三三行行中中找找到到了了关关于于prog.o的的规规则则,该该文文件件的的依依赖赖文文件件是是prog.c、prog.h和和code.
21、h。同同样样,make会会在在后后面面的的规规则则行行中中继继续续查查找找这这些些依依赖赖文文件件的的规规则则,如如果果找找不不到到,则则开开始始检检查查这这些些依依赖赖文文件件的的时时间间戳戳,如如果果这这些些文文件件中中任任何何一一个个的的时时间间戳戳比比prog.o的的新新,make将将执执行行“gcccprog.coprog.o”命命令令,更更新新prog.o文件。文件。以以同同样样的的方方法法,接接下下来来对对文文件件code.o做做类类似似的的检检查查,依依赖赖文文件件是是code.c和和code.h。当当make执执行行完完所所有有这这些些套套嵌嵌的的规规则则后后,make将将处
22、处理理最最顶顶层层的的test规规则则。如如果果关关于于prog.o和和code.o的的两两个个规规则则中中的的任任何何一一个个被被执执行行,至至少少其其中中一一个个.o目目标标文文件件就就会会比比test新新,那那么么就就要要执执行行test规规则则中中的的命命令令,因因此此make去去执执行行gcc命命令令将将prog.o和和code.o连连接接成成目目标标文文件件test。在在上上面面Makefile的的例例子子中中,还还定定义义了了一一个个目目标标clean,它它是是Makefile中常用的一种专用目标,即删除所有的目标模块。中常用的一种专用目标,即删除所有的目标模块。6.2.2 使用
23、使用GNU make编辑编辑makefile Neusoft Institute of Information嵌入式系统工程系嵌入式系统工程系现现在在来来看看一一下下make做做的的工工作作:首首先先make按按顺顺序序读读取取makefile中中的的规规则则,然然后后检检查查该该规规则则中中的的依依赖赖文文件件与与目目标标文文件件的的时时间间戳戳哪哪个个更更新新,如如果果目目标标文文件件的的时时间间戳戳比比依依赖赖文文件件还还早早,就就按按规规则则中中定定义义的的命命令令更更新新目目标标文文件件。如如果果该该规规则则中中的的依依赖赖文文件件又又是是其其他他规规则则中中的的目目标标文文件件,那
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6讲 Linux编程基础 Linux 编程 基础
限制150内