静态函数库与动态函数库区别、应用
1、函數(shù)庫(kù)靜態(tài)與動(dòng)態(tài)區(qū)別:
a、靜態(tài)函數(shù)庫(kù):副檔名為 .a,是把整個(gè)包括入程序里的,程序會(huì)比較大,升級(jí)麻煩
b、動(dòng)態(tài)函數(shù)庫(kù):副檔名為 .so,鏈接的方式,靈活,程序小,主推
2、將動(dòng)態(tài)函數(shù)庫(kù)放入內(nèi)存里提高速度:
首先,我們必須要在 /etc/ld.so.conf 里面寫(xiě)下‘ 想要讀入快取記憶體當(dāng)中的動(dòng)態(tài)函式庫(kù)所在的目錄’,注意喔, 是目錄而不是檔案;接下來(lái)則是利用 ldconfig 這個(gè)執(zhí)行檔將 /etc/ld.so.conf 的資料讀入快取當(dāng)中;同時(shí)也將資料記錄一份在 /etc/ld.so.cache 這個(gè)檔案當(dāng)中吶!
例子:假設(shè)我的 MySQL 資料庫(kù)函式庫(kù)在 /usr/lib/mysql 當(dāng)中,如何讀進(jìn) cache ?
# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib/mysql <==這一行新增的啦!
# ldconfig <==畫(huà)面上不會(huì)顯示任何的資訊,不要太緊張!正常的!
# ldconfig -p <==列出目前有的所有函式庫(kù)資料內(nèi)容 (在 /etc/ld.so.cache 內(nèi)的資料!)
3、某個(gè)程序調(diào)用了什么動(dòng)態(tài)庫(kù),某動(dòng)態(tài)庫(kù)相關(guān)的其他庫(kù)是什么:
# ldd
選項(xiàng)與參數(shù):
-v :列出所有內(nèi)容資訊;
-d :重新將資料有遺失的 link 點(diǎn)秀出來(lái)!
-r :將 ELF 有關(guān)的錯(cuò)誤內(nèi)容秀出來(lái)!
范例一:找出 /usr/bin/passwd 這個(gè)檔案的函式庫(kù)資料
# 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 察看一下這個(gè)檔案,看到 libpam.so 了吧?這就是 pam 提供的函式庫(kù)
范例二:找出 /lib/libc.so.6 這個(gè)函式的相關(guān)其他函式庫(kù)!
# ldd -v /lib/libc.so.6
/lib/ld-linux.so.2 (0x00ab3000)
linux-gate.so.1 => (0x00636000)
Version information: <==使用 -v 選項(xiàng),增加顯示其他版本資訊!
/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
總結(jié)
以上是生活随笔為你收集整理的静态函数库与动态函数库区别、应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vivo x60怎么升级鸿蒙系统?
- 下一篇: 南通在哪里(江苏南通市)