静态函数库与动态函数库区别、应用--ldconfig、ldd
1、函数库静态与动态区别:
a、静态函数库:副档名为 .a,是把整个包括入程序里的,程序会比较大,升级麻烦
b、动态函数库:副档名为 .so,链接的方式,灵活,程序小,主推
2、将动态函数库放入内存里提高速度:
首先,我们必须要在 /etc/ld.so.conf 里面写下‘ 想要读入快取记忆体当中的动态函式库所在的目录’,注意喔, 是目录而不是档案;接下来则是利用 ldconfig 这个执行档将 /etc/ld.so.conf 的资料读入快取当中;同时也将资料记录一份在 /etc/ld.so.cache 这个档案当中呐!
例子:假设我的 MySQL 资料库函式库在 /usr/lib/mysql 当中,如何读进 cache ?
[root@www ~]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib/mysql <==这一行新增的啦!
[root@www ~]# ldconfig <==画面上不会显示任何的资讯,不要太紧张!正常的!
[root@www ~]# ldconfig -p <==列出目前有的所有函式库资料内容 (在 /etc/ld.so.cache 内的资料!)
3、某个程序调用了什么动态库,某动态库相关的其他库是什么:
[root@www ~]# ldd [-vdr] [filename]
选项与参数:
-v :列出所有内容资讯;
-d :重新将资料有遗失的 link 点秀出来!
-r :将 ELF 有关的错误内容秀出来!
范例一:找出 /usr/bin/passwd 这个档案的函式库资料
[root@www ~]# ldd /usr/bin/passwd
....(前面省略)....
libaudit.so.0 => /lib/libaudit.so.0 (0x00494000) <==SELinux
libselinux.so.1 => /lib/libselinux.so.1 (0x00101000) <==SELinux
libc.so.6 => /lib/libc.so.6 (0x00b99000)
libpam.so.0 => /lib/libpam.so.0 (0x004ab000) <==PAM 模组
....(底下省略)....
# 我们前言的部分不是一直提到 passwd 有使用到 pam 的模组吗!怎么知道?
# 利用 ldd 察看一下这个档案,看到 libpam.so 了吧?这就是 pam 提供的函式库
范例二:找出 /lib/libc.so.6 这个函式的相关其他函式库!
[root@www ~]# ldd -v /lib/libc.so.6
/lib/ld-linux.so.2 (0x00ab3000)
linux-gate.so.1 => (0x00636000)
Version information: <==使用 -v 选项,增加显示其他版本资讯!
/lib/libc.so.6:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2