《第3章 Linux编程基础.ppt》由会员分享,可在线阅读,更多相关《第3章 Linux编程基础.ppt(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 1第三章 Linux下的C编程基础 本章主要介绍本章主要介绍LinuxLinux环境下环境下C C语言编程的语言编程的基本技能。主要内容包括:基本技能。主要内容包括:1.1.编辑器(编辑器(ViVi和和EmacsEmacs)的基本操作)的基本操作2.Gcc2.Gcc编译器的使用编译器的使用3.Gdb3.Gdb调试器的使用调试器的使用4.Makefile4.Makefile介绍介绍5.5.使用使用GNU GNU AutotoolsAutotools来生成来生成MakefileMakefile文文件、件、congfigurecongfigure文件。文件。2 23.1.1Vi编辑器编辑器3.1
2、.1ViVi是是Linux系统上的第一个全屏幕交互式系统上的第一个全屏幕交互式编辑程序。我们目前一般使用的是编辑程序。我们目前一般使用的是Vim(ViImproved)。)。3 33.1.1Vi编辑器编辑器一、一、Vi工作模式工作模式Vi有有3种工作模式,分别为命令行模式、种工作模式,分别为命令行模式、插入模式及底行模式插入模式及底行模式(1)命令行模式)命令行模式用户在用用户在用Vi编辑文件时,最初进入的模式编辑文件时,最初进入的模式为命令行模式。在该模式中,可以通过上为命令行模式。在该模式中,可以通过上下移动光标进行下移动光标进行“删除删除”、“复制复制”、“粘贴粘贴”等操作,但无法编辑文
3、字。等操作,但无法编辑文字。4 43.1.1Vi编辑器编辑器(2)插入模式)插入模式在命令行模式下,按在命令行模式下,按“I”或者或者“Insert”键都可以进入插入模式。在该模式下,用键都可以进入插入模式。在该模式下,用户可以进行文字的编辑输入。按户可以进行文字的编辑输入。按“Esc”键键可从插入模式切换到命令行模式。可从插入模式切换到命令行模式。(3)底行模式)底行模式在底行模式下,光标位于屏幕的底行。此时在底行模式下,光标位于屏幕的底行。此时用户可以进行文件保存或退出操作,也可用户可以进行文件保存或退出操作,也可以设置编辑环境,如查找字符串、列出行以设置编辑环境,如查找字符串、列出行号等
4、。号等。5 53.1.1Vi编辑器编辑器二、二、vi的基本操作的基本操作 1)1)进入进入进入进入vivi在系统提示符号输入在系统提示符号输入在系统提示符号输入在系统提示符号输入vivi及文件名称后,就进入及文件名称后,就进入及文件名称后,就进入及文件名称后,就进入vivi全屏幕编辑画面:全屏幕编辑画面:全屏幕编辑画面:全屏幕编辑画面:$vi$vimyfilemyfile 不过有一点要特别注意,就是您进入不过有一点要特别注意,就是您进入不过有一点要特别注意,就是您进入不过有一点要特别注意,就是您进入vivi之后,之后,之后,之后,是处于命令行模式(是处于命令行模式(是处于命令行模式(是处于命令
5、行模式(commandmodecommandmode),),),),您要切换到插入模式(您要切换到插入模式(您要切换到插入模式(您要切换到插入模式(InsertmodeInsertmode)才)才)才)才能够输入文字。初次使用能够输入文字。初次使用能够输入文字。初次使用能够输入文字。初次使用vivi的人都会想先用上下的人都会想先用上下的人都会想先用上下的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己左右键移动光标,结果电脑一直哔哔叫,把自己左右键移动光标,结果电脑一直哔哔叫,把自己左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入气个半死,所以进入气个半死,所以进入气个半
6、死,所以进入vivi后,先不要乱动,转换到后,先不要乱动,转换到后,先不要乱动,转换到后,先不要乱动,转换到插入模式(插入模式(插入模式(插入模式(InsertmodeInsertmode)再说吧!)再说吧!)再说吧!)再说吧!6 63.1.1Vi编辑器编辑器2)2)切换至插入模式(切换至插入模式(切换至插入模式(切换至插入模式(InsertmodeInsertmode)编辑文件)编辑文件)编辑文件)编辑文件 在命令行模式(在命令行模式(在命令行模式(在命令行模式(commandmodecommandmode)下)下)下)下按一下字母按一下字母按一下字母按一下字母i i就可以进入插入模式就可以
7、进入插入模式就可以进入插入模式就可以进入插入模式(InsertmodeInsertmode),这时候你就可以开始输),这时候你就可以开始输),这时候你就可以开始输),这时候你就可以开始输入文字了。入文字了。入文字了。入文字了。3)Insert3)Insert的切换的切换的切换的切换 您目前处于插入模式(您目前处于插入模式(您目前处于插入模式(您目前处于插入模式(InsertmodeInsertmode),),),),您就只能一直输入文字,如果您发现输错了字!您就只能一直输入文字,如果您发现输错了字!您就只能一直输入文字,如果您发现输错了字!您就只能一直输入文字,如果您发现输错了字!想用光标键往
8、回移动,将该字删除,就要先按一想用光标键往回移动,将该字删除,就要先按一想用光标键往回移动,将该字删除,就要先按一想用光标键往回移动,将该字删除,就要先按一下下下下ESCESC键转到命令行模式(键转到命令行模式(键转到命令行模式(键转到命令行模式(commandcommandmodemode)再删除文字。)再删除文字。)再删除文字。)再删除文字。7 73.1.1Vi编辑器编辑器4)退出退出vi及保存文件及保存文件在命令行模式(在命令行模式(commandmode)下,按一下:冒号键进入)下,按一下:冒号键进入Lastlinemode,例如:,例如::wfilename(输入(输入wfilena
9、me将文章以指定的文件名将文章以指定的文件名filename保存)保存):wq(输入输入wq,存盘并退出,存盘并退出vi):q!(输入输入q!,不存盘强制退出不存盘强制退出vi)8 83.1.1Vi编辑器编辑器三、三、三、三、ViVi各模式的功能键各模式的功能键各模式的功能键各模式的功能键(1 1)命令行模式常用的功能键)命令行模式常用的功能键)命令行模式常用的功能键)命令行模式常用的功能键1 1)切换到插入模式)切换到插入模式)切换到插入模式)切换到插入模式 按按按按i i切换进入插入模式切换进入插入模式切换进入插入模式切换进入插入模式insertmodeinsertmode,按按按按ii进
10、入插入模式后是从光标当前位置开始输入进入插入模式后是从光标当前位置开始输入进入插入模式后是从光标当前位置开始输入进入插入模式后是从光标当前位置开始输入文件;文件;文件;文件;按按按按a a进入插入模式后,是从目前光标所在位进入插入模式后,是从目前光标所在位进入插入模式后,是从目前光标所在位进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;置的下一个位置开始输入文字;置的下一个位置开始输入文字;置的下一个位置开始输入文字;按按按按o o进入插入模式后,是插入新的一行,从进入插入模式后,是插入新的一行,从进入插入模式后,是插入新的一行,从进入插入模式后,是插入新的一行,从行首开始输入文
11、字。行首开始输入文字。行首开始输入文字。行首开始输入文字。2 2)从插入模式切换为命令行模式)从插入模式切换为命令行模式)从插入模式切换为命令行模式)从插入模式切换为命令行模式 按按按按ESCESC键。键。键。键。9 93.1.1Vi编辑器编辑器3 3)移动光标)移动光标)移动光标)移动光标 vivi可以直接用键盘上的光标来上下左右移动,但正规的可以直接用键盘上的光标来上下左右移动,但正规的可以直接用键盘上的光标来上下左右移动,但正规的可以直接用键盘上的光标来上下左右移动,但正规的vivi是用小写英文字母是用小写英文字母是用小写英文字母是用小写英文字母h h、j j、k k、l l,分别,分别
12、,分别,分别控制光标左、下、上、右移一格。控制光标左、下、上、右移一格。控制光标左、下、上、右移一格。控制光标左、下、上、右移一格。按按按按ctrlctrl+b b:屏幕往:屏幕往:屏幕往:屏幕往 后后后后 移动一页。移动一页。移动一页。移动一页。按按按按ctrlctrl+f f:屏幕往:屏幕往:屏幕往:屏幕往 前前前前 移动一页。移动一页。移动一页。移动一页。按按按按ctrlctrl+u u:屏幕往:屏幕往:屏幕往:屏幕往 后后后后 移动半页。移动半页。移动半页。移动半页。按按按按ctrlctrl+d d:屏幕往:屏幕往:屏幕往:屏幕往 前前前前 移动半页。移动半页。移动半页。移动半页。按数
13、字按数字按数字按数字0 0:移到光标所在行的:移到光标所在行的:移到光标所在行的:移到光标所在行的 行首行首行首行首“按按按按GG:移动到文章的最后。:移动到文章的最后。:移动到文章的最后。:移动到文章的最后。按按按按$:移动到光标所在行的:移动到光标所在行的:移动到光标所在行的:移动到光标所在行的 行尾行尾行尾行尾。按按按按:移动到光标所在行的:移动到光标所在行的:移动到光标所在行的:移动到光标所在行的 行首行首行首行首按按按按ww:光标跳到下个字的开头:光标跳到下个字的开头:光标跳到下个字的开头:光标跳到下个字的开头 按按按按e e:光标跳到本字的字尾:光标跳到本字的字尾:光标跳到本字的字
14、尾:光标跳到本字的字尾 按按按按b b:光标回到上个字的开头:光标回到上个字的开头:光标回到上个字的开头:光标回到上个字的开头10103.1.1Vi编辑器编辑器4 4)删除文字)删除文字)删除文字)删除文字 x x:每按一次,删除光标所在位置的:每按一次,删除光标所在位置的:每按一次,删除光标所在位置的:每按一次,删除光标所在位置的 后面后面后面后面 一个字符。一个字符。一个字符。一个字符。#x#x:例如,:例如,:例如,:例如,6x6x表示删除光标所在位表示删除光标所在位表示删除光标所在位表示删除光标所在位置的置的置的置的 后面后面后面后面66个字符。个字符。个字符。个字符。XX:大写的:大
15、写的:大写的:大写的XX,每按一次,删除光标所在位,每按一次,删除光标所在位,每按一次,删除光标所在位,每按一次,删除光标所在位置的置的置的置的 前面前面前面前面 一个字符。一个字符。一个字符。一个字符。#X#X:例如,:例如,:例如,:例如,20X20X表示删除光标所在表示删除光标所在表示删除光标所在表示删除光标所在位置的位置的位置的位置的 前面前面前面前面2020个字符。个字符。个字符。个字符。dddd:删除光标所在行。:删除光标所在行。:删除光标所在行。:删除光标所在行。#dddd:从光标所在行开始删除:从光标所在行开始删除:从光标所在行开始删除:从光标所在行开始删除#行行行行 1111
16、3.1.1Vi编辑器编辑器5)复制)复制yw:将光标所在之处到字尾的字符:将光标所在之处到字尾的字符复制到缓冲区中。复制到缓冲区中。#yw:复制:复制#个字到缓冲区个字到缓冲区yy:复制光标所在行到缓冲区。:复制光标所在行到缓冲区。#yy:例如,:例如,6yy表示拷贝从表示拷贝从光标所在的该行光标所在的该行往下数往下数6行文字。行文字。p:将缓冲区内的字符贴到光标所在:将缓冲区内的字符贴到光标所在位置。注意:所有与位置。注意:所有与y有关的复制命令都有关的复制命令都必须与必须与p配合才能完成复制与粘贴功能。配合才能完成复制与粘贴功能。12123.1.1Vi编辑器编辑器6)替换)替换r:替换光标
17、所在处的字符。:替换光标所在处的字符。R:替换光标所到之处的字符,直到:替换光标所到之处的字符,直到按下按下ESC键为止。键为止。7)回复上一次操作)回复上一次操作u:如果您误执行一个命令,可以马:如果您误执行一个命令,可以马上按下上按下u,回到上一个操作。按多次,回到上一个操作。按多次u可以执行多次回复。可以执行多次回复。13133.1.1Vi编辑器编辑器8)更改)更改cw:更改光标所在处的字到字尾处:更改光标所在处的字到字尾处c#w:例如,:例如,c3w表示更改表示更改3个字个字9)跳至指定的行)跳至指定的行ctrl+g列出光标所在行的行号。列出光标所在行的行号。#G:例如,:例如,15G
18、,表示移动光,表示移动光标至文章的第标至文章的第15行行首。行行首。14143.1.1Vi编辑器编辑器(2)底行模式下常用的命令)底行模式下常用的命令在使用在使用lastlinemode之前,请记住之前,请记住先按先按ESC键确定您已经处于键确定您已经处于commandmode下后,再按:冒下后,再按:冒号即可进入号即可进入lastlinemode。15153.1.1Vi编辑器编辑器1)列出行号列出行号setnu:输入:输入setnu后,会在后,会在文件中的每一行前面列出行号。文件中的每一行前面列出行号。setnonu2)跳到文件中的某一行跳到文件中的某一行#:#号表示一个数字,在冒号后号表示
19、一个数字,在冒号后输入一个数字,再按回车键就会跳到该行输入一个数字,再按回车键就会跳到该行了,如输入数字了,如输入数字15,再回车,就会跳到文,再回车,就会跳到文章的第章的第15行。行。16163.1.1Vi编辑器编辑器3)查找字符查找字符/关键字:先按关键字:先按/键,再输入您想键,再输入您想寻找的字符,如果第一次找的关键字不是寻找的字符,如果第一次找的关键字不是您想要的,可以一直按您想要的,可以一直按n会往后寻找到会往后寻找到您要的关键字为止。您要的关键字为止。?关键字:先按关键字:先按?键,再输入您想键,再输入您想寻找的字符,如果第一次找的关键字不是寻找的字符,如果第一次找的关键字不是您
20、想要的,可以一直按您想要的,可以一直按n会往前寻找到会往前寻找到您要的关键字为止。您要的关键字为止。17173.1.1Vi编辑器编辑器4)保存文件保存文件w:在冒号输入字母:在冒号输入字母w就可以将就可以将文件保存起来。文件保存起来。5)离开离开viq:按:按q就是退出,如果无法离开就是退出,如果无法离开vi,可以在,可以在q后跟一个后跟一个!强制离开强制离开vi。wq:一般建议离开时,搭配:一般建议离开时,搭配w一一起使用,这样在退出的时候还可以保存文起使用,这样在退出的时候还可以保存文件。件。18181 1emacsemacs的简介的简介的简介的简介 emacsemacs文文文文本本本本编
21、编编编辑辑辑辑器器器器可可可可以以以以用用用用来来来来编编编编辑辑辑辑文文文文本本本本、剪剪剪剪辑辑辑辑和和和和粘粘粘粘贴贴贴贴文文文文本本本本内内内内容容容容、提提提提供供供供个个个个人人人人日日日日历历历历和和和和日日日日记记记记,阅阅阅阅读读读读UsenetUsenet新新新新闻闻闻闻、发发发发送送送送电电电电子子子子邮邮邮邮件件件件,同同同同时时时时还还还还是是是是一一一一种种种种程程程程序序序序语语语语言言言言解解解解释释释释器器器器,可可可可以以以以编编编编辑辑辑辑C C、LispLisp、TevTev源源源源代代代代码码码码文文文文件件件件、以以以以及及及及LinuxLinux的
22、的的的ShellShell。emacsemacs是由是由是由是由 RichardStallmanRichardStallman发明的,这发明的,这发明的,这发明的,这位发明者还创建了自由软件基金会(位发明者还创建了自由软件基金会(位发明者还创建了自由软件基金会(位发明者还创建了自由软件基金会(FreeFreeSoftwareFoundationSoftwareFoundation,简称,简称,简称,简称FSFFSF)。最初的)。最初的)。最初的)。最初的emacsemacs是用来编辑宏命令的,现已进一步扩充为是用来编辑宏命令的,现已进一步扩充为是用来编辑宏命令的,现已进一步扩充为是用来编辑宏命
23、令的,现已进一步扩充为 UNIXUNIX用户中装机用户数量最大、功能最齐全的免费用户中装机用户数量最大、功能最齐全的免费用户中装机用户数量最大、功能最齐全的免费用户中装机用户数量最大、功能最齐全的免费文本编辑器了。文本编辑器了。文本编辑器了。文本编辑器了。3.1.2Emacs编辑器编辑器1919emacsemacs同同同同VIVI不一样,没有编辑状态和指令状态不一样,没有编辑状态和指令状态不一样,没有编辑状态和指令状态不一样,没有编辑状态和指令状态之分,其最重要的概念是其独特的缓冲区,之分,其最重要的概念是其独特的缓冲区,之分,其最重要的概念是其独特的缓冲区,之分,其最重要的概念是其独特的缓冲
24、区,emacsemacs编辑的所有文件都是放在缓冲区中的,编辑的所有文件都是放在缓冲区中的,编辑的所有文件都是放在缓冲区中的,编辑的所有文件都是放在缓冲区中的,emacsemacs支持支持支持支持同时编辑多个缓冲区,可以将一个文件在多个缓冲区同时编辑多个缓冲区,可以将一个文件在多个缓冲区同时编辑多个缓冲区,可以将一个文件在多个缓冲区同时编辑多个缓冲区,可以将一个文件在多个缓冲区中打开不同的拷贝,甚至其所有的在线帮助和文档以中打开不同的拷贝,甚至其所有的在线帮助和文档以中打开不同的拷贝,甚至其所有的在线帮助和文档以中打开不同的拷贝,甚至其所有的在线帮助和文档以及出错信息都是作为一个缓冲区来显示的
25、,当然这些及出错信息都是作为一个缓冲区来显示的,当然这些及出错信息都是作为一个缓冲区来显示的,当然这些及出错信息都是作为一个缓冲区来显示的,当然这些缓冲区是不可写的,用户可以在这些缓冲区之间拷贝缓冲区是不可写的,用户可以在这些缓冲区之间拷贝缓冲区是不可写的,用户可以在这些缓冲区之间拷贝缓冲区是不可写的,用户可以在这些缓冲区之间拷贝和粘贴文本。并且一般所有的缓冲区在硬盘上都有一和粘贴文本。并且一般所有的缓冲区在硬盘上都有一和粘贴文本。并且一般所有的缓冲区在硬盘上都有一和粘贴文本。并且一般所有的缓冲区在硬盘上都有一个以个以个以个以“#”开头的备份文件,这样在系统突然崩溃的开头的备份文件,这样在系统
26、突然崩溃的开头的备份文件,这样在系统突然崩溃的开头的备份文件,这样在系统突然崩溃的时候可以即时将用户的工作进行备份。时候可以即时将用户的工作进行备份。时候可以即时将用户的工作进行备份。时候可以即时将用户的工作进行备份。3.1.2Emacs编辑器编辑器2020 在在在在编编编编辑辑辑辑文文文文件件件件时时时时,如如如如果果果果用用用用户户户户在在在在编编编编辑辑辑辑一一一一些些些些特特特特殊殊殊殊类类类类型型型型的的的的文文文文件件件件,例例例例如如如如当当当当用用用用户户户户编编编编辑辑辑辑扩扩扩扩展展展展名名名名为为为为.c.c的的的的C C语语语语言言言言文文文文件件件件时时时时,emac
27、semacs会会会会产产产产生生生生菜菜菜菜单单单单选选选选项项项项c c,向向向向用用用用户户户户提提提提供供供供一一一一些些些些针针针针对对对对编编编编辑辑辑辑c c程程程程序序序序特特特特别别别别有有有有用用用用的的的的一一一一些些些些命命命命令令令令。当当当当用用用用户户户户编编编编辑辑辑辑扩扩扩扩展展展展名名名名为为为为.txt.txt的的的的文文文文件件件件则则则则会会会会多多多多出出出出菜菜菜菜单单单单选选选选项项项项textex,让让让让用用用用户户户户在在在在编编编编辑辑辑辑完完完完textex文文文文件件件件后后后后可可可可以以以以即即即即时时时时地地地地观观观观看看看看输
28、输输输出出出出并并并并打打打打印印印印。首首首首先先先先介介介介绍绍绍绍一一一一下下下下几几几几个个个个常常常常见见见见的的的的键键键键盘盘盘盘操操操操作作作作符符符符号号号号的的的的意意意意义义义义:所所所所有有有有的的的的emacsemacs的的的的操操操操作作作作键键键键都都都都是是是是由由由由ControlControl键键键键(一一一一般般般般是是是是键键键键盘盘盘盘上上上上的的的的CtrlCtrl键键键键)和和和和METAMETA键键键键(一一一一般般般般是是是是键键键键盘盘盘盘上上上上的的的的AltAlt键键键键)加加加加上上上上一一一一些些些些键键键键的的的的组组组组合合合合组
29、组组组成成成成的的的的,如如如如果果果果没没没没有有有有AltAlt键键键键,则则则则可可可可以以以以用用用用输输输输入入入入一一一一个个个个EscEsc,再输入相应的键来代替。例如:,再输入相应的键来代替。例如:,再输入相应的键来代替。例如:,再输入相应的键来代替。例如:3.1.2Emacs编辑器编辑器2121lC-x:表示同时按住:表示同时按住Ctrl键和键和x键。键。lCx:表表示示先先按按住住Ctrl键键,然然后后释释放放它它,再按下再按下x键。键。lM-x:表示同时按住:表示同时按住Alt键和键和x键。键。lMx:表表示示先先按按住住Alt键键,释释放放它它,再再按按下下x键。键。3
30、.1.2Emacs编辑器编辑器22222 2emacsemacs的启动和退出的启动和退出的启动和退出的启动和退出 emacsemacs可可可可 以以以以 用用用用 两两两两 种种种种 方方方方 法法法法 启启启启 动动动动。第第第第 一一一一 种种种种 启启启启 动动动动emacsemacs的的的的方方方方法法法法是是是是不不不不装装装装载载载载任任任任何何何何文文文文本本本本文文文文件件件件启启启启动动动动emacsemacs,输入以下命令行:输入以下命令行:输入以下命令行:输入以下命令行:#emacsemacs在屏幕上会出现无任何文本在屏幕上会出现无任何文本在屏幕上会出现无任何文本在屏幕上
31、会出现无任何文本emacsemacs编辑窗口,如图编辑窗口,如图编辑窗口,如图编辑窗口,如图所示所示所示所示。如果用户是初学者,最好的学习方法是:按下如果用户是初学者,最好的学习方法是:按下如果用户是初学者,最好的学习方法是:按下如果用户是初学者,最好的学习方法是:按下Ctrl-hCtrl-h键(即按住键(即按住键(即按住键(即按住CtrlCtrl键后不放,再按下键后不放,再按下键后不放,再按下键后不放,再按下h h字母字母字母字母键键键键2323 第第第第二二二二种种种种启启启启动动动动emacsemacs的的的的方方方方法法法法是是是是通通通通过过过过装装装装载载载载某某某某一一一一个个个
32、个文文文文本文件启动本文件启动本文件启动本文件启动emacsemacs,输入以下命令行:,输入以下命令行:,输入以下命令行:,输入以下命令行:#emacsemacsfilenamefilename如如如如果果果果装装装装载载载载的的的的文文文文件件件件不不不不在在在在当当当当前前前前目目目目录录录录时时时时必必必必须须须须输输输输入入入入该该该该文文文文件件件件名名名名的的的的全全全全称称称称(包包包包括括括括所所所所在在在在目目目目录录录录)。例例例例如如如如,当当当当前前前前目目目目录录录录下下下下有有有有一一一一个个个个文文文文本本本本文文文文件件件件myfile.txtmyfile.t
33、xt,用用用用emacsemacs对对对对其其其其编编编编辑辑辑辑时时时时,输输输输入入入入命命命命令行启动令行启动令行启动令行启动emacsemacs:#emacsemacs myfile.txtmyfile.txt 屏幕上将出现如图所示的屏幕上将出现如图所示的屏幕上将出现如图所示的屏幕上将出现如图所示的emacsemacs编辑窗口编辑窗口编辑窗口编辑窗口。24243 3emacsemacs的基本操作的基本操作的基本操作的基本操作(1(1)光标的移动)光标的移动)光标的移动)光标的移动下面列出下面列出下面列出下面列出emacsemacs中的光标的移动情况及其键盘操作:中的光标的移动情况及其键
34、盘操作:中的光标的移动情况及其键盘操作:中的光标的移动情况及其键盘操作:M-bM-b:光标移动到光标左边的单词的开始处。:光标移动到光标左边的单词的开始处。:光标移动到光标左边的单词的开始处。:光标移动到光标左边的单词的开始处。M-fM-f:光标移动到光标右边的单词的开始处。:光标移动到光标右边的单词的开始处。:光标移动到光标右边的单词的开始处。:光标移动到光标右边的单词的开始处。M-aM-a:光标移动到当前句子的开始处。:光标移动到当前句子的开始处。:光标移动到当前句子的开始处。:光标移动到当前句子的开始处。M-eM-e:光标移动到当前句子的结束处。:光标移动到当前句子的结束处。:光标移动到
35、当前句子的结束处。:光标移动到当前句子的结束处。C-nC-n:光标移动到下一行。:光标移动到下一行。:光标移动到下一行。:光标移动到下一行。C-pC-p:光标移动到上一行。:光标移动到上一行。:光标移动到上一行。:光标移动到上一行。C-aC-a:光标移动到行首。:光标移动到行首。:光标移动到行首。:光标移动到行首。C-eC-e:光标移动到行尾。:光标移动到行尾。:光标移动到行尾。:光标移动到行尾。M-M-:光标移动到文件尾。:光标移动到文件尾。:光标移动到文件尾。:光标移动到文件尾。M-M-编译”命令进行程序的编译,如图11所示。如果程序没有出错,将看到Kdevelop下方的信息框之中显示编译
36、成功的信息。接着便可以执行应用程序了,执行“建立-执行”命令进行程序的连接,如图12所示。若没有发生问题,就会在另一个窗口中看到程序的执行结果,如图13所示。图11 编译应用程序 3939图12 执行应用程序 图13 应用程序的执行结果 一一gcc的简介的简介WhatsGCCGCCstandsfor“GNUCompilerCollection”.GCCisanintegrateddistributionofcompilersforseveralmajorprogramminglanguages.TheselanguagescurrentlyincludeC,C+,Objective-C,Obj
37、ective-C+,Java,Fortran,andAda.3.2GCC编译器41413.2GCC编译器TheabbreviationGCChasmultiplemeaningsincommonuse.Thecurrentofficialmeaningis“GNUCompilerCollection”,whichrefersgenericallytothecompletesuiteoftools.Thenamehistoricallystoodfor“GNUCCompiler”,andthisusageisstillcommonwhentheemphasisisoncompilingCprog
38、rams.42423.2GCC编译器二、二、GCC编译流程编译流程预处理预处理预处理预处理链接链接链接链接编译编译编译编译组译组译组译组译源源源源 程程程程 序序序序(*.c)(*.c)可执行文件可执行文件可执行文件可执行文件预预预预 处处处处 理理理理器器器器编译器编译器编译器编译器组译器组译器组译器组译器连接器连接器连接器连接器43433.2GCC编译器三、三、GCC的常用选项的常用选项GCCGCC的命令行格式:的命令行格式:gccgccoptionsoptionsinfileinfile.常用选项:常用选项:常用选项:常用选项:-v-v版本信息版本信息版本信息版本信息 LinuxLinu
39、x系统中可执行文件有两种格式。第一种系统中可执行文件有两种格式。第一种格式是格式是a.outa.out格式,这种格式用于早期的格式,这种格式用于早期的LinuxLinux系统系统以及以及 UnixUnix系统的原始格式。可执行和连接的格式系统的原始格式。可执行和连接的格式(ELFELF)已经被)已经被LinuxLinux系统作为标准的格式采用,系统作为标准的格式采用,这这种格式很容易实现共享库。种格式很容易实现共享库。44443.2GCC编译器-c编译为目标文件,不连接库编译为目标文件,不连接库-S编译为汇编代码编译为汇编代码-E预处理预处理.预处理之后的代码将送往标预处理之后的代码将送往标准
40、输出准输出-Wwarn.设置警告设置警告,可以设置的警告开可以设置的警告开关很多关很多,通常用通常用-Wall开启所有的警告开启所有的警告-Olevel设置优化级别设置优化级别,level可以是可以是0,1,2,3或者或者s,默认为默认为-O0,即不进行优化即不进行优化处理处理.(注意:在调试完成前尽量不要优化注意:在调试完成前尽量不要优化)45453.2GCC编译器-g产生调试信息产生调试信息.GDB能够使用这些调试能够使用这些调试信息。信息。-ooutfile指定输出文件的文件名指定输出文件的文件名,默认为默认为a.out-mmachine-option.指定所用的平台指定所用的平台.注意
41、:注意:Gcc也可以同时把多个源文件或者目也可以同时把多个源文件或者目标文件编译成可执行文件标文件编译成可执行文件-Idir.把把dir加到头文件的搜索路径中加到头文件的搜索路径中,而而且且gcc会在搜索标准头文件之前先搜索会在搜索标准头文件之前先搜索dir.-llibrary在连接的时候搜索在连接的时候搜索library库库.库库是一些是一些archieve文件文件-其成员是目标文件其成员是目标文件.如果有文件引用如果有文件引用library,library在命令行的在命令行的位置应该在那个文件之后位置应该在那个文件之后,因此因此,越底层的库越越底层的库越要放在后面要放在后面.比如如果你要连
42、接比如如果你要连接pcap库库,那么那么你就需要使用你就需要使用-lpcap对源文件进行编译对源文件进行编译.-Ldir.把把dir加到库文件的搜索路径中加到库文件的搜索路径中,而且而且gcc会在搜索标准库文件之前先搜索会在搜索标准库文件之前先搜索dir.3.2GCC编译器47473.3GDB调试器n nGdb是一款是一款GNU开发组织并发布的开发组织并发布的UNIX/Linux下的程序调试工具。它使你下的程序调试工具。它使你能在程序运行时观察程序的内部结构和内能在程序运行时观察程序的内部结构和内存的使用情况存的使用情况.以下是以下是gdb所提供的一些所提供的一些功能功能:它使你能监视你程序中
43、变量的值它使你能监视你程序中变量的值.它使你能设置断点以使程序在指定的代码它使你能设置断点以使程序在指定的代码行上停止执行行上停止执行.它使你能一行行的执行你的代码它使你能一行行的执行你的代码.注意:注意:gdb程序调试的对象是可执行文件,而不是程序的源代码文件。48483.3GDB调试器n nGdb的使用方法:的使用方法:Gdboptionexecutable-filecore-fileorprocess-idn ngdb基本命令基本命令.file装入想要调试的可执行文件装入想要调试的可执行文件.cd命令:改变工作目录命令:改变工作目录pwd命令:返回当前工作日录命令:返回当前工作日录kil
44、l终止正在调试的程序终止正在调试的程序list列出产生执行文件的源代码的一部分列出产生执行文件的源代码的一部分.n nnext执行一行源代码但不进入函数内部执行一行源代码但不进入函数内部.49493.3GDB调试器step执行一行源代码而且进入函数内部执行一行源代码而且进入函数内部.run执行当前被调试的程序执行当前被调试的程序quit终止终止watch使你能监视一个变量的值而不管它使你能监视一个变量的值而不管它何时被改变何时被改变.break在代码里设置断点在代码里设置断点,这将使程序执这将使程序执行到这里时被挂起行到这里时被挂起.make使你能不退出使你能不退出gdb就可以重新产就可以重新
45、产生可执行文件生可执行文件.shell使你能不离开使你能不离开gdb就执行就执行UNIXshell命令命令.50503.3GDB调试器display在应用程序每次停止运行时显示在应用程序每次停止运行时显示表达式的值表达式的值.infobreak显示当前断点列表,包括每个显示当前断点列表,包括每个断点到达的次数断点到达的次数quit终止终止infofiles显示调试文件的信息显示调试文件的信息.infofunc显示所有的函数名显示所有的函数名.infolocal显示当前函数的所有局部变量显示当前函数的所有局部变量的信息的信息.infoprog显示调试程序的执行状态显示调试程序的执行状态print
46、显示表达式的值显示表达式的值delete删除断点删除断点.示例程序示例程序Greeting.c#include;staticvoidmy_print(char*);staticvoidmy_print2(char*);main()charmy_string=helloworld!;my_print(my_string);my_print2(my_string);voidvoidmy_printmy_print(char*string)(char*string)printfprintf(Thestringis%(Thestringis%snsn,string);,string);voidmy_p
47、rint2(char*string)voidmy_print2(char*string)char*string2;char*string2;intintsize,i;size,i;size=size=strlenstrlen(string);(string);string2=(char*)string2=(char*)mallocmalloc(size+1);(size+1);for(i=0;isize;i+)for(i=0;isize;i+)string2size-i=string2size-i=stringistringi;string2size+1=0;string2size+1=0;p
48、rintfprintf(Thestringprintedbackwardis%(Thestringprintedbackwardis%snsn,string2);,string2);53533.4工程管理器MakeMakeMake是用于自动编译、链接程序的实是用于自动编译、链接程序的实用工具。在开发一个项目时,通常是将项目用工具。在开发一个项目时,通常是将项目分成许多功能模块,每个功能模块又可能被分成许多功能模块,每个功能模块又可能被分成许多子模块,而这些子模块一般就是一分成许多子模块,而这些子模块一般就是一个程序文件。小的项目通常都有十几个或者个程序文件。小的项目通常都有十几个或者几十个文件
49、,而大的项目则会有上百个甚至几十个文件,而大的项目则会有上百个甚至上千个文件。如果要一个一个的编译每个文上千个文件。如果要一个一个的编译每个文件,这个工作是非常繁琐的,使用件,这个工作是非常繁琐的,使用make后后就不需要手工的编译每个程序文件。除了要就不需要手工的编译每个程序文件。除了要写一个写一个makefile文件外,通常所需要做的文件外,通常所需要做的事情就是在命令行敲入事情就是在命令行敲入“make”,然后所有,然后所有的事情都由的事情都由make来完成。来完成。54543.4工程管理器Makemakefile的宗旨就是让编译器知道要编译的宗旨就是让编译器知道要编译一个文件需要依赖其
50、他的哪些文件。当那一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译现最终的生成文件已经过时,而重新编译相应的模块。相应的模块。默认情况下,默认情况下,GNUmake工具在当前工工具在当前工作目录中按如下顺序搜索作目录中按如下顺序搜索makefile:*GNUmakefile*makefile*Makefile可以使用其它文件名吗?55553.4工程管理器Make一、Makefile的基本结构一个简单的Makefile文件包含一系列的“规则”,其样式如下:目标(target):依赖(prerequir