静动态库
- 一.静态库
- 1.设计静态库
- 2.生成静态库
- 3.发布静态库
- 4.使用静态库
- 二.动态库
- 1.设计动态库
- 2.生成和发布动态库
- 3.使用
一.静态库
程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。
静态库链接格式:libxxx.a(前缀是lib,后缀是.a)
1.设计静态库
用mymath.h声明,mymath.c作为实现
2.生成静态库
第一行:形成一个库,叫做libmymath.a
第二行:依赖的文件mymath.o,并且把所有依赖的.o文件打包成一个.a文件(ar是生成静态库的指令,rc是releace和create,连起来就是把后面的文件打包到前面的文件里)
第三行:把所有依赖的源文件变成.o文件 最后进行清理**
这样库就形成了,总结一下就是把所需要的.o文件全部用ar打包成一个.a文件就行了。
3.发布静态库
创建include和mymathlib两个文件在lib里,在将所有的.h文件拷贝到include里,将所有.a文件拷贝到mymathlib里。
4.使用静态库
第一种使用方法
这里直接编译是会报错的,原因很简单。在编译时会进行头文件展开,那么第一件事情就是找到对应的头文件,而它会在默认的路径下查找,但默认的路径里很明显不包括我们自己写的库,所以必须指定路径。
1.-I 选项代表到指定目录下查找头文件
2.-L 选项代表到指定目录下查找库文件
3.-l 选项代表指定的库(库的名字去掉前缀和后缀)
第二种方法
gcc会默认在默认目录里搜索,那么我们可以自己把头文件和库拷贝到对应默认目录里(或者添加软链接)。
但是gcc只认c库里的文件,所以要使用第三方库依然要加-l选项。
二.动态库
动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
动态库:前缀是lib,后缀是.so
1.设计动态库
接下来就用这两个源文件打包形成动态库。
2.生成和发布动态库
动态库的生成与静态库差别不大,这里将动静态库连起来使用。
shared: 表示生成共享库格式
fPIC:产生位置无关码(position independent code)
从上面看到一个.a库和一个.so库合并成了一个lib库。
3.使用