《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;可用vicat查看它们的内容
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.am.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.cf1.cf2.c如前
#include <stdio.h>
#include <dlfcn.h>
#define SO_FILE "./libmy.so"
/
/共享库libmy.so被限定在当前目录,也可放在标准位置,但要使用linux下gcc编译的四个步骤lddldconfig处理
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小时内删除。