库的概念
库是一套方法或数据集,本质就是一些文件。在开发的过程中,会经常用到一些基础的功能,例如C语言的printf函数,如果每个程序员在开发时都要写一个printf函数或者其它经常用到的函数,那会非常影响效率。为了使得开发更加高效,将一些基础常用的功能或者数据整合成库,不需要再重复编写。
库的命名规则
以lib开头,后面接上库的名字,然后是后缀,例如C语言的静态库 libc.a ,其中 c 就是这个库的名字,后缀是 .a 。除此之外,在后缀后面可能还会接上版本,如动态库 libc.so.2.77 。
库的使用
概述
我们知道程序形成可执行文件需要经过预处理、编译、汇编、链接四个阶段。要使用库中的方法,就要将程序与库中的方法链接起来,使程序能找到对应的方法。要链接库有动态链接和静态链接两种方式,由此可将库分为动态库(共享库)和静态库两种。如果把库中的方法想象成书,那么动态链接就好比去图书馆看书,图书馆就相当于动态库,静态链接则好比去书店把书买回家看,书店就相当于静态库。
动态链接与动态库
动态链接,就是让程序能找到动态库中对应方法的地址,程序运行时,会跳到库中执行对应的方法(此举称为库函数调用),完成之后再返回(库函数返回)。
我们知道要运行的程序都要先加载到内存中,使用动态库时,由于需要跳转到动态库中执行对应的方法,会将动态库加载到内存中,每次要使用的时候就跳到动态库里面运行然后返回。那么当这个动态库缺失时,所有相关的程序都无法运行。
静态链接与静态库
静态链接,则是直接将静态库中该方法的代码实现到我们写的程序中,使用时像函数一样直接调用。根据静态链接的特点,我们不难发现:只需要在程序链接时将使用的方法拷贝到程序中,之后就不再需要静态库。但是相比动态链接,静态链接形成的可执行程序会占更大的空间。
库的使用实例
首先我们先随便写一个简单的.c文件并用gcc编译成可执行文件
接着使用命令 ldd [文件名] 就能看到该可执行文件使用的库,从下图可以看到用的库是动态库libc.so.6 ,也就是c的动态库。
如果要使用静态链接,可以在使用gcc命令后添加-static选项,也就是 gcc [.c文件名] -o [文件名] -static 。但是静态库一般没有安装,需要另外下载,这里不再演示。