共享库和静态库的制作

库的创建

静态库:

库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。它们通常由一组相互关联的函数组成来执行某项常见的任务,
标准库的位置一般存放在/lib和/user/lib目录中。
库的命名规则名字总是以lib开头以.a或者.so结尾,其中以.a结尾的代表传统的静态函数库,而以.so结尾的代表共享函数库库函数通常以静态库和共享库的形式存在,我们可以用ls /usr/lib命令查看,例子:gcc -o main main.c /usr/lib/libm.a这个命令的含义是让我们编译一个名叫main.c的文件,将编译好的文件以main命名,同时在编译时我们不但要访问标准c语言库,还要访问数学库来解决。也可以写成gcc -o main main.c -lm
静态库:将.c文件处理成.o文件
在这里插入图片描述
将.o文件添加到库里面ar c(创建)r(添加)v(显示过程).例如:ar crv libm.a add.o sum.o,
将add.o,sum.o添加到libfoo.a中
在这里插入图片描述
编译文件时,必须要在后面加上路径以-L开头 ,后面是需要的库以-l开头,值得注意的是l后面的库名是不要前缀(lib)和后缀(.a)的,否则会出错
在这里插入图片描述
将方法移动到标准目录底下,我们可以不加路径执行成功,系统会自动访问标准库
在这里插入图片描述
在这里插入图片描述

共享库

共享库的创建是以gcc来创建的,例如:gcc -shared -fpic -o libfoo.so add.o max.o。这里将add.o换成add.c也会运行成功,系统会帮我们处理,但是笔者在这里想说明方法是以.o的形式添加到共享库中的。
在这里插入图片描述
当我们准备编译时,出现了错误,系统提示我们没有找到这个库。是不是很困惑?明明在后面加了路径,这是因为我们没有将libfoo.so共享库移动到标准目录底下。此时我们可以通过一个叫lld的命令来查看我们编译main.c时所需要的库,此时我们看到libfoo.so => mot found,提示我们没有找到这个库,这时我们将共享库移动到标准库,就能运行成功了,因为系统已经在标准库中找到了libfoo.so共享库。编译好后我们再运行main时,不用再后面加路径了,因为main函数已经链接到了共享库的位置。在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

共享库和静态库的区别

静态库所需要的库删除以后代码还能运行,因为在代码中已经将静态库方法拷贝过来。
共享库不会包含,它只是运行时进行链接,如果删除的话,会运行失败
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值