动静态库的创建 | 使用 | 加载
发布时间:2024-01-25 13:47:47
动静态库的介绍
静态库( .a ):在程序编译的时候,把库的代码链接(拷贝)到可执行程序。
动态库(.so):在程序的执行时,链接动态库的代码。多个程序同时共享代码。
创建一个静态库:
创建计算器,带有加减乘除功能。
声明和定义分离。创建文件
静态库的打包
一:生成 .o文件
为了简化操作,我们只测试加法功能
创建testadd目录 将Add.o文件移动到testadd目录,创建一个简单的test代码
包含上层目录的Add.h头文件
将test.c文件编译成test.o文件
因此用户可以通过包含头文件的形式 再编译成可执行文件
因此通过将.o文件和.h文件打包给别人,别人就能使用库。
这一个将.o文件拷贝编译生成可执行可执行程序的过程就是静态链接。
但是有果有许多的.o文件,打包起来就很繁琐,用户使用也不舒服。
介绍第二种方式
二、借助ar指令简化
1)生成静态库
ar是gun归档工具,常用于目标文件打包成静态库
r-c表示replace-create
指令:
生成静态库libmymath.a
通过 ar - tv指令查看静态文件中的目录列表
2)将头文件和库打包(发布)
将我们的库给别人实际上是给出俩个文件。一个文件包含库,一个文件包含头文件
下面修改我们的Makefile自动化建构文件
创建mymath_lib目录
底下包含俩个子目录
include (用来放头文件)
lib(用来放库文件)
make构造
tree查看目录mymath_lib
这样就完成对静态库的创建,如果我们想发送出去。我们还可以进行cxz压缩文件
静态库的使用
我们有一份静态库mymath_lib
在使用时,必须指明链接哪一个库,哪个路径
如果直接gcc编译会出错
原因是找不到库 " "会再当前目录下寻找文件,找不到再全系统目录下寻找
将mymath_lib的头文件和库文件分别拷贝到系统目录中系统头文件一般在/user/include/路径下然后编译的时候通过 gcc 文件名 +l指明要链接的第三方库的名称不推荐的原因操作相对繁琐,会污染系统库,不想使用了需要自行删除
方法二:(推荐)
在gcc编译时候 ,通过-I(小写i) 和 L(大写L)指定路径和库
动态库的打包
第一步:生成.o文件并打包
生成.o文件之后,不再使用ar打包而是在gcc 选项之后添加shared下面依旧利用自动化构建工具(先生成.o在整合生成.so)
第二步:发布
与静态库的生成一样,需要将库发布。发布就需要放在同一个目录下的俩个不同目录下
创建库目录my_math_lib
子目录 include放头文件
lib放库 .so
完善我们的自动化构建
增加output功能
tree一下结构
完成动态库的制作和发布
动态库的使用
在该路径底下只有动态库文件和用户.c文件