本文通过以下几个问题对Ubuntu系统下库的相关问题进行解析。
1.库是什么?
库是写好的,现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。
所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:
2.库的种类有哪些?
linux下的库有两种:静态库和共享库(动态库)。
静态库:lib库名.a
动态库:lib库名.so
区分一个概念:库是包含前缀lib以及后缀.a或者.so的一个整体
3.动态库和静态库的特点是什么?
(1)静态库的特点:
- 静态库对函数库的链接是放在编译时期完成的。
- 程序在运行时与函数库再无瓜葛,移植方便。
- 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
(2)动态库的特点:
- 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。
- 动态库在程序运行时才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。
4.如何查看一个可执行程序依赖哪些库?
ldd命令可以查看一个可执行程序依赖的共享库
例如# ldd + 路径/可执行程序
5.库的位置和程序引用的位置不同怎么办?
可以通过软连接来解决这个问题,但前提是这个库在电脑里已经安装了。
(1)软链接的用法:
软连接(softlink)也称符号链接。linux里的软连接文件就类似于windows系统中的快捷方式。软连接文件实际上是一个特殊的文件,文件类型是I。软连接文件实际上可以理解为一个文本文件,这个文件中包含有软连接指向另一个源文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软连接所指向的源文件实体。
通过下述指令来创建软连接:
ln –s 源文件 软连接文件
通过下述指令来删除软连接
rm -f 软链接文件
(2)链接步骤
首先,找到库的位置,可以通过locate指令,如下图所示:
然后,通过ln指令在程序所找的库的路径(比如/usr/local/lib)下生成一个软链接即可。