制作静态库
为什么要学习制作动静态库?因为以后工作是会经常用到
1.如果我们想写个库怎么办?(编写库的人的角度)
2.如果把库给别人,别人怎么用?(使用库的人的角度)
静态库(尾缀.a的文件)
动态库(尾缀.so的文件)
开始制作静态库
注意
:库里面,一定不能用main函数,否则如果被多个.c文件包含就会出错
开始写库:
先创个main.c测试一下代码是否有问题。
运行代码:
我们看到确实可以执行程序,说明代码没有问题。
如果只把.h和.o文件给别人,别人能用吗?
测试:
1.main.c移到usrlib中
2.生成.o文件
3.将.o文件和.h文件拷贝一份到usrlib中
4.usrlib中编译测试
1. main.c移到usrlib中
2. 生成.o文件
3. 将.o文件和.h文件拷贝一份到usrlib中
4. 编译main.c文件和.o文件形成可执行
运行代码
发现确实可以运行。
注意
:这里其实.h文件可以不用拷贝进去也能运行
上面这个方法确实可行,但是又太多.o文件了,所以我们把.o文件打包,而这就是静态库。
制作静态库
这个.a文件就是静态库。
Makefile 自动化上面打包的过程
演示:
make生成文件:
make clean:删除文件
那么怎么发布库给别人用呢?
计划
生成一个hello目录文件
hello中内容:
更改Makefile使其自动化生成hello
make hello:自动生成hello
查看是否生成成功
而接下来我们只要把hello给别人用即可
那么我们该如何使用库呢?
使用静态库
方法一:
gcc默认头文件搜索路径是:/usr/include/
gcc默认库搜索路径是:/lib64
所以我们把自己写的库和头文件放进其中即可。
头文件放入其中
库放入其中
运行代码看一下是否成:
我们发现编译代码报错
因为自己写的库属于第三方库,gcc默认使用C语言库,所以我们要指明用哪个库。
用库libhello.a去掉前缀lib,去掉后缀.a就是库名。
运行代码:
我们看到确实可以。
我们刚刚拷贝库到系统的默认路径下,就叫做库的安装。不建议自己写的库安装到系统路径下。
方法二:
-I: 指明头文件搜索路径
-L: 指明库文件搜索路径
-l: 指明使用哪个库