静态库: .a
程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候将不再需要静态库
动态库:.so
程序在运行的时候采取链接动态库的代码,多个程序共享使用库的代码。
一个与动态库链接的可执行文件仅仅包含他所用到的函数入口地址的一个表,而不是外部函数所在目录文件的整个机器码
在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中这个过程就叫做动态链接
动态库可以在东哥程序件共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制,允许物理内存中的一封动态库被要用到该库的所有进程共用,节省了内存和磁盘空间
静态库实现:
先写几个简单的add.h\add.c\sub.h\sub.c\main.c
add.h
1 #ifndef __ADD_H__
2 #define __ADD_H__
3 int add(int a, int b);
4 #endif
sub,h
1 #ifndef __SUB_H__
2 #define __SUB_H__
3 int sub(int a, int b);
4 #endif
add.c
1 #include "add.h"
2 int add(int a, int b)
3 {
4 return a + b;
5 }
sub.c
1 #include "sub.h"
2
3 int sub(int a, int b)
4 {
5 return a - b;
6 }
main.c
1 #include <stdio.h>
2 #include "add.h"
3 #include "sub.h"
4
5 int main()
6 {
7 int a = 10;
8 int b = 20;
9 printf("add(%d, %d) = %d\n", a, b, add(a,b));
10 a = 100;
11 b = 29;
12 printf("sub(%d, %d) = %d\n", a, b, sub(a, b));
13 return 0;
14 }
生成静态库
查看静态库中的目录列表
实现动态库: