Linux操作系统试验十-UNIXgcc编译器的使用与编程环境
LinuxLinux 操作系统操作系统 实验报告实验报告 实验十实验十UNIX gccUNIX gcc 编译器的使编译器的使 用与编程环境用与编程环境 计算机与数据科学学院Linux 操作系统实验报告 一、实验目的一、实验目的 1掌握 gcc 和 g的用法; 2了解目标代码、库函数的使用; 3掌握静态库和共享库的构造与使用; 4掌握多模块和多语言联合开发方法; 5掌握 make 命令和 Makefile 文件的使用。 二、实验环境二、实验环境 一台装有 Windows 操作系统 PC 机,上装有虚拟机系统 VMWare,实验过程通过 VMWare 系 统启 Linux 系统工作。 三、实验内容与实验过程及分析三、实验内容与实验过程及分析 一、一、C/CC/C编程编程 1、C 语言版“Hello World” 用 vi 编辑一个名为 hello.c 的文件,其内容为 include main { printf”Hello World C\n”; } 编译并执行程序。 编译方法为 cc hello.c// 生成可执行程序 a.out cc –o hello hello.c// 生成可执行程序 hello cc –c hello.c//生成目标文件 hello.o cc –S hello.c//生成汇编语言程序 hello.s 执行程序 ./a.out执行当前目录内,刚编译生成的 a.out 程序 ./hello执行当前目录内,刚编译生成的 hello 程序 计算机与数据科学学院Linux 操作系统实验报告 2、组合编程 设有 C 语言文件 f1.c,内容为 include f1int arg{ printf”f1 you passed d\n”,arg; } C 语言文件 f2.c。内容为 include f2char *arg{ printf”f2 you passed s\n”,arg; } C 语言文件 m.c。内容为 include main{ f116; f2”Hello World”; } 请使用 vi 编辑并生成以上程序,分别用以下方法编译,观察生成文件或运行生成的可执行 程序 cc –c f1.c f2.c生成 f1.o 和 f2.o cc –S f1.c f2.c 生成 f1.s 和 f2.s;可用 vi 或 cat 查看它们的内容 cc –o mp m.c f1.c f2.c 生成 mp,执行方法为./mp cc –o m m.c f1.o f2.o 生成 m,执行方法为./m 计算机与数据科学学院Linux 操作系统实验报告 构造自己的静态库 cc–o f1.c f2.c//生成目标文件 f1.o, f2.o ar crv libmyl.a f1.o f2.o//生成库 libmyl.a ranlib libmyl.a//为子函数建立内容表 使用自己的库 cc–o mp m.c libmyl.a //使用库 libmyl.a cc –o mp m.o libmyl.a// 使用库 libmyl.a 和 m.o cc –o mp m.c -L.–lmyl // 在当前目录以默认方法使用库 myl 计算机与数据科学学院Linux 操作系统实验报告 3、构造可共享库 cc -c f1.c f2.c//生成目标文件 cc -shared -o libmy.so f1.o f2.o//由目标文件生成共享库 或cc -shared –o libmy.so –c f1.c f2.c//由源文件生成共享库 4、使用共享库 //设以下程序的文件名为 f3.c,f1.c 和 f2.c 如前 include include define SO_FILE “./libmy.so“ //共享库 libmy.so 被限定在当前目录,也可放在标准位置,但要使用 ldd 和 ldconfig 处理 main { void *sfp;char *err; inttmpi16; int *f1int ,*f2char *;//定义函数指针 sfpdlopenSO_FILE,RTLD_LAZY;//打开共享库 ifsfpNULL{ fprintfstderr,dlerror; exit1; } f1dlsymsfp,“f1“;//获取函数 f1 入口地址(指 针) errdlerror;//检查是否成功 iferr{ fprintfstderr,err; exit2; } f2dlsymsfp,“f2“;//获取函数 f2 入口地址(指 针) errdlerror;//检查是否成功 iferr{ fprintfstderr,err; exit3; } fprintfstderr,“-----------begine-------------\n“; f2“Test String“;//调用函数 f2 f1tmpi;//调用函数 f1 fprintfstderr,“end\n“; 计算机与数据科学学院Linux 操作系统实验报告 } dlclosesfp; exit0; //关闭共享库 5、Makefile 的编写与使用 (1)针对 2的 Makefile 文件 a.Makefile 文件的构造 f f1.o f2.o f3.o gcc -o f f1.o f2.o f3.o f1.o f1.c gcc –c f1.c f2.o f2.c gcc –c f2.c f3.o f3.c gcc –c f3.c 计算机与数据科学学院Linux 操作系统实验报告 b.Makefile 的使用 make生成默认(第一个)目标 make f生成目标 f make f1.o 生成目标 f1.o 四、实验总结四、实验总结 存在问题存在问题 makefile 的使用和编写频繁出现问题,对 makefile 的不熟悉,理解不透彻 解决方法解决方法 多看书,从书上找到相关问题的解决办法,对于书上没有的内容上网查 询,查看各种命令的使用方法及应用 收获收获 对进程的相关应用有了一定的认识和使用,有问题要及时询问,上网查询解 决。 五、教师评语五、教师评语