1、函数库静态与动态区别

a、静态函数库:副档名为 .a,是把整个包括入程序里的,程序会比较大,升级麻烦

b、动态函数库:副档名为 .so,链接的方式,灵活,程序小,主推

2、将动态函数库放入内存里提高速度:

首先,我们必须要在 /etc/ld.so.conf 里面写下‘ 想要读入快取记忆体当中的动态函式库所在的目录’,注意喔, 是目录而不是档案;接下来则是利用 ldconfig 这个执行档将 /etc/ld.so.conf 的资料读入快取当中;同时也将资料记录一份在 /etc/ld.so.cache 这个档案当中呐!

例子:假设我的 MySQL 资料库函式库在 /usr/lib/mysql 当中,如何读进 cache ?

# vi /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/lib/mysql <==这一行新增的啦!

# ldconfig <==画面上不会显示任何的资讯,不要太紧张!正常的!

# ldconfig -p <==列出目前有的所有函式库资料内容 (在 /etc/ld.so.cache 内的资料!)

3、某个程序调用了什么动态库,某动态库相关的其他库是什么:

# ldd

选项与参数:

-v :列出所有内容资讯;

-d :重新将资料有遗失的 link 点秀出来!

-r :将 ELF 有关的错误内容秀出来!

范例一:找出 /usr/bin/passwd 这个档案的函式库资料

# 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 这个函式的相关其他函式库!

# 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