Linux——动静态库

本文介绍了库的概念,区分了动态库和静态库,详细讲述了它们的制作过程、使用方法以及动态库加载原理。特别强调了虚拟地址空间在动态库加载中的作用和共享库的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行开发过程中,我们不可避免地会使用到人家的库,那么库到底是什
么?而库又分为动态库和静态库,那么这两个又是什么?这篇博客由我来
简单介绍动静态库。

1. 库

我们进行大型开发的时候,会有许多个头文件和原文件,并且也会使用C语言的标准库,还有或多或少的第三方库。当我们写出这样的程序:
在这里插入图片描述
我们知道它编译是使用了C语言的标准库,而我们包了stdio.h这个头文件,按常识来说,我们也因该会有他的原文件,而我们看到他源文件存放的地方找到他时,我们找不到.c为后缀的。但是可能会找到以lib开头.so或者.a.和某些版本号这样的形式的文件。而这样的文件就是库,而库分为动态库(Linux中.so后缀)和静态库(Linux中.a后缀)。库大致是我们所使用的其他原文件的集合目的,而使用动静态库的开发也提高了开发效率和安全性。这里的说明只是大致的说明,接下来我会详细的介绍。

2. 静态库

我们在开发过程中会建立多个头文件和原文件,比如制作一个简陋般的计算器:
在这里插入图片描述
在这里插入图片描述
我们使用gcc编译它们:
在这里插入图片描述
这里在编译时不需要加上头文件的原因是,gcc会自动在系统默认路径和当前路径下寻找需要的头文件。这样编译我们感觉还行,但是如果我们的原文件有100个呢?当我们把我们的头原文件交给他人使用的时候,其他人使用也是添加这么多原文件编译吗?会不会太费劲了?而且如果我们使用这么多的原文件需要交叉使用生成不同的可执行呢?每次都把他们重新编译一边吗?

a. 静态库的制作

所以这时候我们其实可以把所有的原文件处理成可重定向二进制文件,也就是将这些文件都处理成.o文件,这样最起码我们形成多个可执行的时候,不需要再重新编译浪费时间了,而只需要链接需要的文件就可以了:

在这里插入图片描述
而现在假如把我们写的头文件和.o文件交付给他人使用比交付给.c文件安全性高且效率高:
当用户使用时,只需要将他的原文件和发过来的.o文件编译链接就可以了:
在这里插入图片描述
我们这样使用是传过来的原文件较少,如果有许多个呢?这时候库就出现了。我们可以将这些.o文件进行打包这样使用的时候就没有那么麻烦而只用包相应的头文件就可以了,将.o文件打包的命令是ar命令:
在这里插入图片描述
其中的-rc选项意思是当生成文件已经存在时替换它,不存在则生成。
这样就做好了我们的静态库,现在我们将我们的静态库把User文件中的.o文件替换掉:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值