静态函数库的创建和使用

共享函数库的创建和使用

glibc函数库的使用

1. 静态函数库的创建与使用

项目中模块的构成见实验五,源代码,分别为add.c,sum.c,mylib.h和app.c.

使用编辑器 vi 编辑下列脚本

static_lib:add.c sum.c 
	gcc -c add.c
	gcc -c sum.c
	ar -cru libdemo.a    add.o sum.o
app_static: libdemo.a
	gcc  -static  app.c  -L.  -ldemo  -o  app_static

将下列脚本保存至文件static_app中

通过下列操作可产生静态函数库

$ make -f static_app static_lib  //static_lib表示产生静态库的目标
$ ls libdemo.a   //显示静态函数库文建

使用静态函数库产生可执行目标代码

$ make -f static_app app_static  //app_static表示产生可执行目标代码
$ ./app_static  //运行可执行代码

2. 共享函数库的创建和使用

使用vi编辑下列脚本

shared_lib:add.c sum.c 
	gcc -fPIC -c add.c
	gcc -fPIC -c sum.c
	gcc -shared add.o sum.o -o libdemo.so
app_shared:libdemo.so
	gcc    app.c  -L.  -ldemo  -o  app_shared

将上述脚本保存至文件shared_app中

通过下列操作产生共享函数库libdemo.so

$ make -f shared_app  shared_lib //目标shared_lib表示产生共享函数库
$ ls libdemo.so   //查看共享函数库文件

使用共享函数库,据操作如下:

$ make -f shared_app app_shared //目标app_shared表示产生可执行代码app
$ ls -l app_static app_shared //比较两个文件的大小
$ ./app_shared  //执行

3. glibc函数库

(1) 通过软中断调用Linux内核功能

使用编辑器vi编辑下列源代码

.equ	sys_EXIT, 1		    
.equ	sys_WRITE, 4	    
.equ	dev_STDOUT, 1	    

	.section	.data    
msg:	.ascii	" Hello \n"	
len:	.long	. - msg	 

	.section	.text  
_start:	 
	movl	$sys_WRITE, %eax	
	movl	$dev_STDOUT, %ebx	
	movl	$msg, %ecx		
	movl	len, %edx		
	int	$0x80			
 
	movl	$sys_EXIT, %eax		
	movl	$0, %ebx		
	int	$0x80

将上述代码保存至 demo.s,通过下列操作生成可执行代码

$ as demo.s -o demo.o    //编译生成中间目标代码
$ ld demo.o -o demo  //链接生成可执行代码
$ ./demo    //运行demo程序
(2) 通过glic函数库使用Linux!内核功能

使用编辑器vi编辑下列源代码

#include<stdio.h>
int main(void)
{
printf("hello\n");
}

将上述代码保存至test.c中,通过下列操作生成可执行代码

$ gcc -o test test.c
$ ./test //执行test

比较demo和test执行结果.

4. 思考题

  1. glibc函数库的作用

  2. 分析静态函数库与共享函数库各自的优缺点