1.1 库的概念
库是由.c文件编译生成的二进制文件。
库的内部就是各种函数的实现。
windows中库的格式:
xxx.dll -- 动态库
xxx.lib -- 静态库
linux中库的格式:
libxxx.a --- 静态库
libxxx.so --- 动态库
2.1 静态库的制作和使用
2.1.1 静态库的概念
静态库的格式是libxxx.a
静态库在使用的时候,会将库中所有的机器码编译到可执行程序中。
使用静态库的程序,体积比较大。
使用静态库的可执行程序,运行的效率比较高。
静态库的运行,不依赖库文件。
静态库的更新比较麻烦,需要对整个程序重新编译。
2.1.2 静态库的制作
1.将xx.c 编译生成 xxx.o
gcc -c xxx.c -o xxx.o
2.制作静态库
ar -cr libxxx.a xxx1.o xxx2.o ……
xxx是哭的名字,比如libadd.a ,add就是库的名字
将编译生成的.o文件放入库中。
ar:制作库的命令
-c:create
-r:replace
3.使用静态库的方式
方式1:直接编译
gcc main.c /路径/libxxx.a -o main
方式2:
gcc main.c -l库名 -L 库文件所在路径 -o main
-l库名:表示链接库
-L 库文件所在路径:表示指明库文件的位置
2.2 静态库的使用示例
add.h
#ifndef __ADD_H__
#define __ADD_H__
int add(int x,int y);
#endif
add.c
int add(int x,int y){
return x+y;
}
main.c
#include<my_head.h>
#include "add.h"
int main(int argc,const char *argv[]){
int sum = add(10,20);
printf("sum = %d\n",sum);
return 0;
}
1.编译生成库文件
2.3 使用静态库
方式1:直接编译
方式2:(推荐使用)
3.1 动态库
动态库的使用格式libxxx.so
动态库在使用的时候,只会将库中的函数的符号表编译到库文件中,使用动态库的程序,体积比较小。
使用动态库的可执行程序,运行的效率比较低。
动态库的运行需要依赖库文件。
动态库的更新比较方便。只需要替换库文件即可,不需要对可执行程序重新编译。