意义:为了避免代码的重写率,我们可以将已经写好的代码形成一个库,当我们再次用到的时候可以直接调用,而不是重新去写,即“站在巨人的肩膀上”。
linux下有两种库:
一、静态库:
准备工作:
//swap.c
int swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
return 0;
}
//main.c
#include <stdio.h>
int main()
{
int x=0,y=1;
swap(&x,&y);
printf("x=%d y=%d\n",x,y);
return 0;
}
1 将我们需要的函数生成一个.o 文件
root# gcc -c swap.c 这时候当前目录下会有一个swap.o文件
2 通过.o文件形成静态库命
root# ar -rsv libSWAP.a swap.o
即:ar -rsv 静态库名称 目标文件1 目标文件2(即可以吧多个.o文件添加在一个库中)
静态库命名方式:以lib开头+库功能描述+.a
3 静态库在程序中的使用
直接使用静态库中的函数,但最好声明函数
4 编译程序
root# gcc main.c -L/root(静态库路径) -l SWAP(静态库名称) -o exe
或root# gcc main.c libSWAP.c -o exe
二、动态库(共享库):
1 也是以.o文件建立动态库
2 命令:
root# gcc -shared -fPCI -o libSWAP.so swap.o
root# gcc -shared -fPCI -o 动态库名称 目标文件1 目标文件2
动态库命名方式:以lib开头+库功能描述+.so
3 动态库在执行程序时去到动态库中调用函数,所以我们应将动态库放到指定目录中,
动态库存放路径必是系统库存放路径# mv libswap.so /usr/lib
4 编译源程序 gcc main.c -l库名称 -o exe
root# gcc main.c -l SWAP -o exe
需要注意的是:对于静态库和动态库,其本质的区别在于:
静态库:库中的代码在编译过程中就已经载入其中,因此主函数程序内容很大,浪费空间。
动态库:库中的代码在编译过程中只是做了一下引用,在程序运行时才载入内存的,因此其主函数内容很少。
另外,对于ar -rsv等用法可以查找ar[-] 的用法,以及参数选项,这里不多做解释