资源描述:
《实验一 LINUX编程环境.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第一章Linux基础(2学时)实验一LINUX编程环境实验目的1.熟悉Linux下C语言程序设计的基本步骤2.掌握gcc编译器的各种参数的使用方法3.掌握gcc编译器创建函数库的方法4.掌握gdb调试程序的方法5.掌握多文件编译中的makefile的用法实验内容1.编辑以下程序,按要求编译运行。#includeintmain(void){doublecounter;doubleresult;doubletemp;for(counter=0;counter<4000.0*4000.0*400
2、0.0/20.0+2030;counter+=(5-3+2+1)/4){temp=counter/1239;result=counter;}printf("运算结果是:%lf",result);}实验步骤和要求:(1)分别利用gcc的预处理,编译,汇编,链接命令生成example.i,example.s,example.o文件,分别用ls命令显示,要求有相应的命令和截图;(2)分别使用不同的优化选项O0~O3,进行编译生成可执行程序m0~m3,然后使用time命令统计程序的运行,如time./m0,比较
3、运行时间。要求有运行截图和必要的分析。分析:首先我们要知道-O0表示没有优化,-O1为缺省值,-O3优化级别最高,通过运行结果我们可以看出-O0相比其他能够提高可执行文件的执行效率,但是,编译、连接的速度就相应地要慢一些。-O1~O3:比-O0的优化级别更高,能更好的优化编译、连接。但整个编译、连接过程会更长。 2.编写如下程序hello.h,hello.c,main.c,将源程序hello.h:voidhello(constchar*name);hello.c#includevoi
4、dhello(constchar*name){printf(“hello%s”,name);}main.c#include“hello.h”intmain(){hello(“everyone”);return0;}实验步骤和要求(要求每一步都要有运行截图):(1)分别编辑以上三个源程序;(1)利用gcc–c命令将hello.c编译成.o文件,并用ls命令查看。(2)利用以下命令,将.o文件创建静态库,并用ls查看。arcrvlibmyhello.ahello.o注:静态库的命名规范是以lib为前缀,紧跟静态
5、库名,扩展名为.a(1)在程序中调用生成的静态库文件,运行程序查看输出结果。gcc-ohellomain.c-L.–lmyhello./hello(2)删除库文件libmyhello.a,再运行hello程序,测试hello程序是否链接了该库文件。删除库文件libmyhello.a后(3)创建动态函数库,得到动态库文件libmyhello.so,并用ls命令查看。gcc-shared-fPIC-olibmyhello.sohello.o(1)使用动态函数库,运行程序,观察运行结果。gcc-ohellomai
6、n.c-L.-lmyhello若出错,执行mvlibmyhello.so/usr/lib思考:1.若同时生成同名的静态库和动态库文件,gcc命令会调用哪个库文件?当静态库和动态库同名时,gcc命令将优先调用动态库。2.总结如何创建函数库,静态库和动态库有何区别.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。3.设计一程序,要求计算输入的整数的平均值,将程序分成多个文件编译(main
7、.c,average.c,average.h),并编写makefile文件;用make编译后改成返回最小值再编译,分析有多少文件不需重新编译。实验步骤和要求(要求每一步都要有运行截图):要求有源程序和make文件以及运行的截图//main.c#include"average.h"main(){floata,b,ave;floataverage(floata,floatb);ave=average(a,b);}//average.c#includefloataverage(floata,fl
8、oatb){floatave;scanf("%f,%f",&a,&b);ave=(a+b)/2;printf("averageis%f",ave);return(ave);}//average.hfloataverage(floata,floatb);Makefile#Itisanexamplefordescribingmakefileedit:main.oaverage.ogcc-oeditmain.oav