Linux共享库学习笔记
ldd命令察看动态链接程序依赖了哪些库:
$ ldd /bin/ln
linux-gate.so.1 => (0x00990000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00c6b000)
/lib/ld-linux.so.2 (0x0085d000)
其中linux-gate.so.1是Linux Virtual Dynamic Shared Object,介绍如下:
from http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-102-3/
在早期的 x86 处理器中,用户程序与管理服务之间的通信通过软中断实现。 随着处理器速度的提高,这已成为一个严重的瓶颈。 自 Pentium? II 处理器开始,Intel? 引入了 Fast System Call 装置来提高系统调用速度, 即采用 SYSENTER 和 SY***IT 指令,而不是中断。
您所看到的 linux-vdso.so.1 是个虚拟库,或者说是 Virtual Dynamic Shared Object,它只存在于程序的地址空间当中。 在旧版本系统中该库为 linux-gate.so.1。 该虚拟库为用户程序以处理器可支持的最快的方式 (对于特定处理器,采用中断方式;对于大多数最新的处理器,采用快速系统调用方式) 访问系统函数提供了必要的逻辑 。
动态库配置文件/etc/ld.so.conf,可以用ldconfig命令来处理/etc/ld.so.conf.
"ldconfig 命令在 /etc/ld.so.cache 中为最近使用过的共享库生成必须的链接和 cache , 动态加载器利用来自 ld.so.cache 的缓存文件来定位需要动态加载及链接的文件。 如果改变了 ld.so.conf(或在 ld.so.conf.d 中增加新文件), 必须运行 ldconfig 命令(以 root 用户身份)来重构 ld.so.cache 文件。 "
/sbin/ldconfig -p命令展示/etc/ld.so.cache中的内容