深圳大学Linux上C程序编译,调试和工程文件管理实验报告,你懂的_第1页
深圳大学Linux上C程序编译,调试和工程文件管理实验报告,你懂的_第2页
深圳大学Linux上C程序编译,调试和工程文件管理实验报告,你懂的_第3页
深圳大学Linux上C程序编译,调试和工程文件管理实验报告,你懂的_第4页
深圳大学Linux上C程序编译,调试和工程文件管理实验报告,你懂的_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、深 圳 大 学 实 验 报 告 课程名称: Linux操作系统 实验项目名称: Linux上C程序编译,调试和工程文件管理 学院: 计算机与软件学院 专业: 软件工程 指导教师: 冯禹洪 报告人: 学号: 班级: 实验时间: 2014/12/26 实验报告提交时间: 2014/12/27 教务处制一、 实验目标:熟悉Linux上C程序设计环境,包括以下内容:1. 联机帮助man命令2. 编译工具gcc的使用3. 熟悉使用gdb来调试程序4. 熟悉C工程文件的管理工具makefile二、实验环境与工件湖边Linux实验室 Fedora 13三、实验内容与步骤1. 动态库函数可以在多个应用程序之间

2、共享,可以减少应用程序文件的容量和应用程序的装载时间。因此,熟悉构建动态库可以提高软件的编写质量。请跟随以下步骤构建动态库message,并用其编写程序、编译和运行。(40分)1.1 编写源程序message.c(见图1)和main.c(见图2)图1. message.c源程序图2.main.c源程序1.2 用以下命令对message.c进行编译,其中,“-fPIC”选项是告诉gcc产生的代码不要包含对函数和变量具体内存位置的引用。1.3 以上命令将获得目标文件message.o,使用以下命令建立共享函数库message:1.4 使用1.3获得的共享函数库来编译main.c文件1.5 设置共享

3、函数库搜索路径1.6 运行程序并附上结果1.7 构建静态可执行程序1.7.1 $gcc c message.c1.7.2 $ar crv libmsg.a message.o1.7.3 $gcc o main main.c L./ -lmsg1.7.4 $./main1.8 运行以下两个命令并截图说明结果:$ldd goodbye$ldd main$ls l goodbye main答:main和goodbye的不同点在于代码被载入的时刻不同。main使用的是静态库,代码在编译过程中已经被载入可执行程序,因此体积较大;Goodbye使用的是动态库,代码是在可执行程序运行时才载入内存的,在编译过

4、程中仅简单的引用,因此代码体积较小。/*附加题:经观察,如果用ubuntu, main 和googbye的大小在一些发行版本下没有区别, 如果实验如此,请尝试解释这一现象。附加题目,平时成绩+5分,超过40分不算。*/发现两个文件大小不是一样的2. 图3-4中的reverse程序是有bug的,请使用gdb去观察程序的行为,对关键行为截图说明,定位错误(截图说明)并修正程序bug。附上修正的程序及其运行结果。(40分)图3. reverse.h头文件图4. reverse1.c源程序1 /* reverse.c */ 2 #include<stdio.h> 3 #include&qu

5、ot;reverse.h" 4 /*/ 5 int reverse(str) 6 7 char *str; 8 int i; 9 int len; 10 char c; 11 len=strlen(str); 12 for(i=0;i<len/2;i+) 13 14 c=*str+i; 15 *(str+l)=*str+len-i-1; 16 *(str+len-i-1)=c; 17 18 19 int main() 20 21 char str1024; 22 printf("Give me a word to reverse:"); 23 scanf(&

6、quot;%s",&str);24 reverse(str); 25 printf("REVERSED:%sn",str); 26 修改明显的错误后如下:继续修改:加入头文件1 /* reverse.c */ 2 #include<stdio.h> 3 #include"reverse.h" 4 #include<string.h> 5 /*/ 6 int reverse(char *str) 7 8 int i; 9 int len; 10 char c; 11 len=strlen(str); 12 for(

7、i=0;i<len/2;i+) 13 14 c=*str+i; 15 *(str+i)=*str+len-i-1; 16 *(str+len-i-1)=c; 17 18 19 int main() 20 21 char str1024; 22 printf("Give me a word to reverse:"); 23 scanf("%s",&str); 24 reverse(str); 25 printf("REVERSED:%sn",str); 26 现在可以编译了:gcc reverse.c o reverse

8、 g,先运行发现有错:只有三个的可以换,其他的很多的都是错的下面用gdb调试程序;我怀疑出错的地方在主要倒换函数处,因为主函数是没有错误的,我在我的程序的第十四行和第十五行加入两个断点测试:接着run一下:不断的输出数值,继续(输入c)下一步,观察下一步的数值和内存值:发现到第三步c的值居然为h,就是这里出错,因为我们的测试数据为abcdefg;但是欢乐之后居然出现gbcdefa,这样显然是错的,经过观察,函数体是错的,应该改为:c=*(str+i);*(str+i)=*(str+len-i-1);改后的代码为:运行结果:结果正确3假设project有5个文件:main.c(图5), myto

9、ol1.h(图6), mytool1.c(图7), mytool2.c, mytool2.h,其中,mytool1.c应该包含mytool1.h,mytool2.c应包含mytool2.h,生成的二进制文件为main。相应的依赖关系见图10。请编写相应的makefile并用make编译然后运行,步骤如下:3.1. $make3.2. $./main要求:附上相应的makefile源代码及编译和运行结果。(20分)图5. main.c源程序图6. mytool1.h源程序图7. mytool1.c源程序图8. mytool2.h源程序图9. mytool2.c源mak程序图10.各源程序之间的依赖关系文件:(写在同一个目录下

温馨提示

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

评论

0/150

提交评论