《Linux操作系统》
实验报告
实验十:UNIX gcc编译器的使用与编程环境
1、实验目的
(1)掌握gcc和g++的用法;
(2)了解目标代码、库函数的使用;
(3)掌握静态库和共享库的构造与使用;
(4)掌握多模块和多语言联合开发方法;
(5)掌握make命令和Makefile文件的使用。
2、实验环境
一台装有Windows操作系统PC机,上装有虚拟机系统VMWare,实验过程通过VMWare系统启Linux系统工作。
3、实验内容与实验过程及分析
一、C/C++编程
1、C语言版“Hello World”
用vi编辑一个名为hello.c的文件,其内容为
#include <stdio.h>
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程序
2、组合编程
设有C语言文件f1.c,内容为:
#include <stdio.h>
f1(int arg){
printf(”f1: you passed %d\n”,arg);
}
C语言文件f2.c。内容为:
#include <stdio.h>
f2(char *arg){
printf(”f2: you passed %s\n”,arg);
}
C语言文件m.c。内容为:
#include <stdio.h>
main(){
f1(16);
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
构造自己的静态库
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
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 <stdio.h>
#include <dlfcn.h>
#define SO_FILE "./libmy.so"
/
/共享库libmy.so被限定在当前目录,也可放在标准位置,但要使用linux下gcc编译的四个步骤ldd和ldconfig处理
main()
{
void *sfp; char *err;
int tmpi=16;
int (*f1)(int ),(*f2)(char *); //定义函数指针
sfp=dlopen(SO_FILE,RTLD_LAZY); //打开共享库
if(sfp==NULL){
fprintf(stderr,dlerror()); exit(1);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论