【lesson42】制作静态库和使用静态库

文章目录

  • 制作静态库
  • 使用静态库

制作静态库

为什么要学习制作动静态库?因为以后工作是会经常用到

1.如果我们想写个库怎么办?(编写库的人的角度)
2.如果把库给别人,别人怎么用?(使用库的人的角度)

静态库(尾缀.a的文件)
动态库(尾缀.so的文件)

开始制作静态库
注意库里面,一定不能用main函数,否则如果被多个.c文件包含就会出错
开始写库
【lesson42】制作静态库和使用静态库_第1张图片
【lesson42】制作静态库和使用静态库_第2张图片
【lesson42】制作静态库和使用静态库_第3张图片
【lesson42】制作静态库和使用静态库_第4张图片
先创个main.c测试一下代码是否有问题。
【lesson42】制作静态库和使用静态库_第5张图片
运行代码:
【lesson42】制作静态库和使用静态库_第6张图片
我们看到确实可以执行程序,说明代码没有问题。

如果只把.h和.o文件给别人,别人能用吗
测试:
1.main.c移到usrlib中
2.生成.o文件
3.将.o文件和.h文件拷贝一份到usrlib中
4.usrlib中编译测试

1. main.c移到usrlib中
【lesson42】制作静态库和使用静态库_第7张图片
2. 生成.o文件
【lesson42】制作静态库和使用静态库_第8张图片
3. 将.o文件和.h文件拷贝一份到usrlib中
【lesson42】制作静态库和使用静态库_第9张图片

4. 编译main.c文件和.o文件形成可执行
【lesson42】制作静态库和使用静态库_第10张图片
运行代码
【lesson42】制作静态库和使用静态库_第11张图片
发现确实可以运行。
注意:这里其实.h文件可以不用拷贝进去也能运行

上面这个方法确实可行,但是又太多.o文件了,所以我们把.o文件打包,而这就是静态库
制作静态库
【lesson42】制作静态库和使用静态库_第12张图片
这个.a文件就是静态库。

Makefile 自动化上面打包的过程
【lesson42】制作静态库和使用静态库_第13张图片
演示:
make生成文件:
【lesson42】制作静态库和使用静态库_第14张图片
make clean:删除文件
【lesson42】制作静态库和使用静态库_第15张图片
那么怎么发布库给别人用呢?
计划
生成一个hello目录文件
hello中内容:
【lesson42】制作静态库和使用静态库_第16张图片
更改Makefile使其自动化生成hello
【lesson42】制作静态库和使用静态库_第17张图片
make hello:自动生成hello
【lesson42】制作静态库和使用静态库_第18张图片
查看是否生成成功
【lesson42】制作静态库和使用静态库_第19张图片

而接下来我们只要把hello给别人用即可
【lesson42】制作静态库和使用静态库_第20张图片
那么我们该如何使用库呢?

使用静态库

方法一:
gcc默认头文件搜索路径是:/usr/include/
gcc默认库搜索路径是:/lib64
所以我们把自己写的库和头文件放进其中即可。

头文件放入其中
【lesson42】制作静态库和使用静态库_第21张图片
库放入其中
在这里插入图片描述
运行代码看一下是否成:
【lesson42】制作静态库和使用静态库_第22张图片
我们发现编译代码报错
因为自己写的库属于第三方库,gcc默认使用C语言库,所以我们要指明用哪个库。

用库libhello.a去掉前缀lib,去掉后缀.a就是库名。
在这里插入图片描述
运行代码:
【lesson42】制作静态库和使用静态库_第23张图片
我们看到确实可以。

我们刚刚拷贝库到系统的默认路径下,就叫做库的安装。不建议自己写的库安装到系统路径下。
【lesson42】制作静态库和使用静态库_第24张图片

方法二:
在这里插入图片描述

-I: 指明头文件搜索路径
-L: 指明库文件搜索路径
-l: 指明使用哪个库

你可能感兴趣的:(linux,linux,静态库,C)