实验三 基本开发工具的使用_第1页
实验三 基本开发工具的使用_第2页
实验三 基本开发工具的使用_第3页
实验三 基本开发工具的使用_第4页
实验三 基本开发工具的使用_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三基本开发工具的使用(1)实验目的1.复习vi编辑器的使用掌握gcc编译器的使用。掌握gdb调试器的使用。掌握make工具的使用。实验内容使用vi编辑器完成以下4个文件的内容输入:[操作步骤]在/home目录下创建experiment3子目录,其命令:cd/home(enter)mkdirexperiment^。在该目录下,创建以下四个文件,文件名:hello.h、starfun.h、hello.c、star.c,其命令是:geidthello.hgeditstarfun.hgedithello.cgeditstar.c。使用vi编辑器分别输入以下内容,如图1、图2所示:文件(E)编辑(1)查看(堇>终端小转到《鱼精助⑧:[root^LocaIhcst[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhostroot]#rd/horrehurre]#irkdirirrentShurre]#gedi1heHo.tihurre]#rd/horre/cxperirren13cxpei'irrentS]#gcditheIEoLhcxpei'irrentS]#gcdltstarfun,hcxpei'irrentS]#gcditheIEeccxpei'irrentS]#gcditstarLccxpei'irrentS]#图1使用gedit编辑以下内容蒲置::[root^LocaIhcst[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhost[root^LocaIhostl«Ek)LcS4个字节star.c127个字Bjilarfiukh481个字宵A.starfun.h文件内容如下:/*****starfun.h*****/#ifndefSTARFUN_H#defineSTARFUN_H#defineNUM4#defineNUMBER3intstar1(){inti,j,k;for(k=1;k<=NUM;++k){for(i=1;i<=(NUM-k);++i)printf("");for(j=1;j<=(2*k-1);++j)printf("*");printf("\n");}return0;}intstar2(){inti,j,k;for(k=NUMBER;k>=0;--k){for(i=1;i<=(NUMBER-k+1);++i)printf("");for(j=1;j<=(2*k-1);++j)printf("*");printf("\n");}return0;}#endifhello.h文件内容如下:/*hello.h*/#ifndefHELLO_H#defineHELLO_Hvoidhello(){star1();printf("hello,myfriends\n");}#endifhello.c文件内容如下:voidshowhello(){hello();}star.c文件内容如下:#include"starfun.h"#include"hello.h"#include<stdio.h>intmain(){star1();star2();showhello();return0;}使用gcc编译器,编译程序[操作步骤]⑴第一种方法:分步进行由star.cstarfun.h文件生成star.o目标文件:gcc-cstar.c-ostar.o由hello.chello.hstarfun.h生成hello.o目标文件gcc-chello.c-ohello.o由hello.ostar.o生成应用程序myproggccstar.ohello.o-omyprog执行应用程序myprog[root@localhost01_hello]#./myprog执行情况如下图图3所示:l,jDut^'locaELiostexperiiitntw汗gey-cstar.c-ustar,。[rout^loca(hostexpei'Eireiit3j?tgre~ctieMo.c-otietla.o[root^lora(hostexpei'Eireiit3]?tgccstai■.口heEEc.c-cnypreg[root^lora(hostexpei'Eirent3j?t./nyprog*************************tieE[d,nyfrtends{rout^locaIhostexpei'g图3使用gcc编译器,编译程序(2)一条命令完成以上操作:A.执行清屏命令:clearB-输入命令生成可执行程序myprog:gccstar.chello.c-omyprogC.执行程序myprog,其命令是:./myprog3.常见选项的应用⑴写出-Wll选项的作用:允许发出gcc提供的所有有用的报警信息。写出-w选项的作用:关闭所有警告。写出-v选项的作用并执行:打印出编译器内部编译各过程的命令行信息和编译器的版本。测试选项,列出结果如下图图4所示:[root@localhost01_hello]#gccstar.chello.c-omyprog[root@localhost01_hello]#gcc-wstar.chello.c-omyprog[root@localhost01_hello]#gcc-Wallstar.chello.c-omyprog

[r。。面lu瞬Ehcst[r。。面lu瞬Ehcst[r。。面lu瞬[r。。面lu瞬Ehcst[r。。面lu瞬Ehcst[r。。面lu瞬Ehcst[r。。面lu瞬EhcstexperirrentSlflexperirrentSlflexperirrentSlflexperirrentSlflstar.cheE沁-口nryprog-wstar.,ctietEo.c-o-wstar.,ctietEo.c-o[stur.<?heMo.€pragnrypTog-onypiogprintf'InfiteincBudedfromstar.c:J:stwfunh】iifunctionstur11:starfun.h:9:^srning:inrpticitdecCarattonffunctionstar.€:1nfuncttoniibinprintf'star.€:7:\\ai]iing:trrpIiciLdecEaratlcjioffuncttoilsho^hftfc'heHo*Infunctionsliowhet[u':heIto.c:2;wwjiiingiiivpticitdec[araLlcjioffunctionheIEd'l^^iot^lucaIhostcxperiirentSlfl|图4gcc选项测试结果显示4.使用动态库,如下图图5所示。[root@localhost01_hello]#gcc-c-fpichello.c[root@localhost01_hello]#ls[root@localhost01_hello]#gcc-shared-s-olibhello.sohello.o[root@localhost01_hello]#ls[root^loca[tnjstexperirrent3l#gcc-c-fpictieLtu[root^locaqh<jfteuperirren13]#EstieMo.ctie[Do.titieIEo.cstar.cstarfun.hstar.oheMo.he[Ionfi/pro^star.c"'starfun[raot^loca[hostexpei'iiTtutSlflgcc-shared-5-ci\ibheEEc.sotieIEc.c[root^locaEhujitexperiiTtutSlflEsheI(c.ctie[Do.titieI[o.oi^prcgstar.c"starfun.h"he[(c.c"heIIIoIihhclit?.star.cstarfun.hstar.o[rool^locaIhuMexpmrinrnt3]#,图5使用动态库注意libhello.so库文件的命名格式,(1)(2)也可以用下边命令替代gcc-fpic-shared-shello.c-olibhello.so[root@localhost01_hello]#cplibhello.so/usr/lib注意/usr/lib为用户库自动搜索路径[root@localhost01_hello]#gcc-lhellostar.c-omystar[root@localhost01_hello]#lddmystarlibhello.so=>/usr/lib/libhello.so(0x4002d000)libc.so.6=>/lib/tls/libc.so.6(0x42000000)/lib/ld-linux.so.2=>/lib/ld-linux.so.2(0x40000000)[root@localhost01_hello]#./mystar****十十十十十*****a、上、上、上、上、上*******十十十十十************a、上、上、上*****十十十十十十十*******hello,myfriends[root@localhost01_hello]#(6)执行情况如下图图6所示。froot^locaIhos1experirrentS]#cp[Lhticklo.so/usr/!ib[root^locaIhos1experirrentS]#gee-theIl(>star.c-onysMr[root^locaIhos1experirrentS]#IddnystarEibheito.se=〉/usr/!^b/Eibheito.so(0^40027000)[ibc.su.fi=>/Iib/tEx/Iibc.so.t»(0x42000000)/tib/Id-Einuxso.2=>/lib/Id-Iinux.so.2(0x4(X)0000⑴froot^locaIhos1experirrentS]#./mystur*奉**奉**奉**:heI\a,nyfriendj;|(rcot^lccaIho"lexperirrentS]#图6上述代码执行情况1使用静态库[root@localhost01_hello]#rm*.orm:是否删除一般文件‘hello.o’?y[root@localhost01_hello]#rmmystarrm:是否删除一般文件‘mystar’?y[root@localhost01_hello]#[root@localhost01_hello]#rmlibhello.*执行情况如下图图7所示。图7上述代码执行情况2[root@localhost01_hello]#gcc-chello.c-ohello.o

[root@localhost01_hello]#ar-rclibhello.ahello.o[root@localhost01_hello]#gccstar.clibhello.a-omystar[root@localhost01_hello]#./mystar****a、上、上、上*****十十十十十十十*******a、上、上、上************a、上、上、上个个个个个十十十十十十十*******hello,myfriendsvl执行情况如下图图8所示。vlllwjht/lwiinc/cxpcrij¥i£nt3扣'IE;炳南"E;查看戏)终端也转到(:鱼帮助坦)i-ddtlflrd/hcire/expertrrentSexpe]■trrentS]#gcc-cheI[c.c-ahe![oLoexperirrentS]#m-rc[ibtieEEuLai-ddtlflrd/hcire/expertrrentSexpe]■trrentS]#gcc-cheI[c.c-ahe![oLoexperirrentS]#m-rc[ibtieEEuLaheE[oLcexpej'irrentS]#gccstar.cIibheE[u.d-<jnystar+*****奉*r李**奉奉*奉***奉*率***奉事*heEEu,nyfriend*[Idol^ioca[hostexperEirentS]#图8上述代码执行情况3调试器的使用⑴.gdb进入02_gdb目录执行[root@localhost02_gdb]#gcc-geg1.c-oeg1[root@localhost02_gdb]#gdbeg1执行情况如下图图9所示。[runt^lncaihcstexperiirent3]#gdbegI<WJgdbRedlitLinux(5,3p眼t-0.20021技9.】8「h)Copyright2003FreeSoft\\sreFoundstton,】nc,GUBisfreeEoftvsre,coveredbythe<NJ<£iieraIPublicLicense,endyouarevtIcorretochangeitaurf/ordistributecopiesofitundercertainconditionii.Type'showcopying'ioseetherenditiomi.ThereisabsnlutellynovarrantyforGZfi.Type'shew\\nrranty'fordetaiks.Thi£(,BvsEccnfiguredas'i^Kfi-redhat-tinux-gnu"...eg[:没有毋个文件或目弟,(gdb)|图9显示gdb相关信息(2)gdb相关操作查看文件,在gdb中键入“l”(list)就可以查看所载入的文件设置断点,在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可查看断点情况,在设置完断点之后,用户可以键入“infob”来查看设置断点情况,在gdb中可以设置多个断点运行代码,gdb默认从首行开始运行代码,可键入“r”(run)即可查看变量值,在gdb中只需键入“p”+变量值即可单步运行,单步运行可以使用命令“n”(next)或“s”(step)恢复程序运行,可以使用命令“c”(continue)恢复程序的正常运行了.实验三基本开发工具(2)【实验日的】1、了解Makefile的基本概念和基本结构2、初步掌握编写简单Makefile的方法3、了解递归Make的编译过程4、初步掌握利用GNUMake编译应用程序的方法【实验仪器】1、装有Linux操作系统的PC机一台;2、XSBase270或XSBase255ARM实验开发平台一套【实验内容】一、使用命令行的方式手动编译程序方法1、利用文本编辑器创建hello.c文件//hello.c//writtenbyEmdoor#include<stdio.h>intmain(){printf("WelcomeEmdoor!\n");return1;2、手动编译hello应用程序在hello.c的目录的终端下输入:[root@local]$gcc-chello.c[root@local]$gcchello.o-ohello通过ls命令查看当前目录下是否生成源代码hello.c的object文件hello.o和可执行文件hello,运行可执行文件hello。查看一下运行结果。[root@local]$./hello3、修改hello.c文件,重新手动编译应用程序。4、删除hello.o和hello文件,执行情况如下图图10所示。[root@local]$rm-fhello.o[root@local]$rm-fhello图10创建hello,c并执行系列操作二、利用GNUmake自动编译应用程序方法1、利用文本编辑器创建一个makefile文件,并将其保存到与hello.c相同的目录下。#makefiletestforhelloprogram#writtenbyEmdoorCC=gccCFLAGS=all:hellohello:hello.o$(CC)$(CFLAGS)hello.o-ohellohello.o:hello.c$(CC)$(CFLAGS)-chello.c-ohello.oclean:rm-rfhello*.o2、先后执行如下命令[root@local]$make[root@local]$ls[root@local]$./hello查看并记录所生成的文件和运行的结果如下图图11所示。[hss^lucailicisthss]$geditiiskeflie[hss^lucailicisthss]$irakegcc-cheHo.c-oheEHo.ogccheHo-oheU口[hss^lucailicisthss]$2lieL!he![口.che\lo.c"heito.oiiakeFlkiiskefik'剧[心EhosthssJS./heiioicorreiiSSl[hss^locailicisth”]$图11查看所生成文件及运行结果3、执行makeclean命令:[root@local]$makeclean如下图图12所示。[hss@locaEhusthss]$makeckailrnn-rfheI沁[hss@loca[hosthss]$图12执行makeclean命令4、修改hello.c文件,重复第2、3步操作,查看并记录所生成的文件和运行结果,并与手动编译进行比较,写出你的结论。5、重新编辑makefile文件(斜黑体表示修改部分)#makefiletestforhelloprogram#writtenbyEmdoorCC=gccCFLAGS=OBJS=hello.oall:hellohello:$(OBJS)$(CC)$(CFLAGS)$人-o$@hello.o:hello.c$(CC)$(CFLAGS)c$<-o$@clean:rmrfhello*.o6、重复第2,3步操作,查看并记录所生成的文件和运行的结果。如下图图13所示。比较这两种操作,写出你的结论。同时指出$人、$@、$<在上述Makefile中的含义。[hss^loca(hosths.s]$geditimkefile[hss^loca[hostntike所{:-cheHo-aheI!【eqgccheIEo.o-otieLEo[hss^loca[hostIshtL:oheHoheimc*het[oLoimkefileirakefik-"[hss^loca(host../heItoWtcorreUSSJ|[hss@loca[hosttiss]$图13修改makefile文件后再次运行结论:修改后的makefile文件重新运行结果与修改前的运行结果一致。含义:$人:所有不重复的依赖文件,以空格分开;$@:目标文件的完整名称;$<:第一个依赖文件的名称。三、多个.c文件的编译1、创建文件hellol.c、hello2.c、hello.h和makefile//hellol.c//writtenbyEmdoor#include<stdio.h>intmain(){printf("WelcomeEmdoor!\n");test2();return1;}//hello2.c//writtenbyEmdoor#include"hello2.h"#include<stdio.h>voidtest2(void){printf("WelcomeEmdoor!-hello2\n");}//hello2.h//writtenbyEmdoorvoidtest2(void);#makefiletestformultifilesprogram#writtenbyEmdoorCC=gccCFLAGS=OBJS=hello1.ohello2.oall:hellohello:$(OBJS)$(CC)$(CFLAGS)$A-o$@hellol.o:hellol.c$(CC)$(CFLAGS)-c$<-o$@hello2.o:hello2.c$(CC)$(CFLAGS)-c$<-o$@clean:rm-rfhello*.o2、先后执行如下命令[root@local]$make[root@local]$ls[root@local]$./hello查看并记录所生成的文件和运行的结果,如下图图14所示并写出你的结论。Ihosthss]$geditmakefikIhosthss]$iibkegcctieE[ol.cLieI~oheitolieiIo2.ctieE.tihei.oirakefeielieiIo2.c'"heEi<)2heitci.imlcefeie"Vhe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论