linux实验报告3 Linux上C程序编译调试和工程文件管理.docx
《linux实验报告3 Linux上C程序编译调试和工程文件管理.docx》由会员分享,可在线阅读,更多相关《linux实验报告3 Linux上C程序编译调试和工程文件管理.docx(13页珍藏版)》请在冰点文库上搜索。
linux实验报告3Linux上C程序编译调试和工程文件管理
深圳大学实验报告
课程名称:
Linux操作系统
实验项目名称:
Linux上C程序编译,调试和工程文件管理
学院:
计算机与软件学院
专业:
软件工程
指导教师:
冯禹洪
报告人:
文成学号:
2011150259班级:
02
实验时间:
2013/12/31
实验报告提交时间:
2013/12/31
教务处制
一、实验目标:
熟悉Linux上C程序设计环境,包括以下内容:
1.联机帮助man命令
2.编译工具gcc的使用
3.熟悉使用gdb来调试程序
4.熟悉C工程文件的管理工具makefile
二、实验环境与工件
湖边Linux实验室
Fedora13
三、实验内容与步骤
1.动态库函数可以在多个应用程序之间共享,可以减少应用程序文件的容量和应用程序的装载时间。
因此,熟悉构建动态库可以提高软件的编写质量。
请跟随以下步骤构建动态库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设置共享函数库搜索路径
1.6运行程序并附上结果
1.7构建静态可执行程序
1.7.1$gcc–cmessage.c
1.7.2$ar–crvlibmsg.amessage.o
1.7.3$gcc–omainmain.c–L./-lmsg
1.7.4$./main
1.8运行以下两个命令并截图说明结果:
$lddgoodbye
$lddmain
$ls–lgoodbyemain
/*附加题:
经观察,如果用ubuntu,main和googbye的大小在一些发行版本下没有区别,如果实验如此,请尝试解释这一现象。
附加题目,平时成绩+5分,超过40分不算。
*/
2.图3-4中的reverse程序是有bug的,请使用gdb去观察程序的行为,对关键行为截图说明,定位错误(截图说明)并修正程序bug。
附上修正的程序及其运行结果。
(40分)
图3.reverse.h头文件
图4.reverse1.c源程序
3.假设project有5个文件:
main.c(图5),mytool1.h(图6),mytool1.c(图7),mytool2.c,mytool2.h,其中,mytool1.c应该包含mytool1.h,mytool2.c应包含mytool2.h,生成的二进制文件为main。
相应的依赖关系见图10。
请编写相应的makefile并用make编译然后运行,步骤如下:
3.1.$make
3.2.$./main
要求:
附上相应的makefile源代码及编译和运行结果。
(20分)
图5.main.c源程序
图6.mytool1.h源程序
图7.mytool1.c源程序
图8.mytool2.h源程序
图9.mytool2.c源程序
图10.各源程序之间的依赖关系
四、实验结果
1.
1.1编写源程序message.c
编写源程序main.c
1.2对message.c进行编译
获得目标文件message.o
1.3建立共享函数库message:
1.4使用1.3获得的共享函数库来编译main.c文件
得到
1.5设置共享函数库搜索路径
1.6运行程序并附上结果
1.7构建静态可执行程序
1.8运行$lddgoodbye
$lddmain的结果如下
执行$ls–lgoodbyemain
静态可执行程序和动态可执行程序的比较如下:
静态库:
当应用程序和静态库一起编译时,引用的库函数中的代码会被直接包含进二进制程序
静态可执行程序(完整的、独立运行)
共享函数库:
每个库函数在所有应用程序之间共享-全局函数
减少文件的容量
减少大型Linux应用程序的装载时间
提高系统的安全性
动态可执行程序(不完整、依靠外部共享库以运行
2.
编写程序:
首先使用如下命令编译
使用gdb去观察程序的行为,输入命令gdbreserve
输入list1和l查看代码
输入run运行程序。
运行有错误
用breakmian可以设断点
Infobreak可以显示断点
修改代码:
在gdb下键入run
Ok
3.
写好源程序
先使用gcc-c命令
编写相应的makefile
用make编译然后运行
五、实验总结与体会
这次实验是照着ppt做的,ppt写的比较详细,懂得了如何在linux下运行C程序。
以及动态函数库和静态函数库的区别和gdb的使用。
Gdb不是很会用,不太习惯,第二题的找bug找了很久,不知道怎么找。
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注: