紹興建站模板系統(tǒng)網(wǎng)站關(guān)鍵詞如何快速上首頁(yè)
庫(kù)文件
庫(kù)文件是計(jì)算機(jī)上的一類文件,可以簡(jiǎn)單的把庫(kù)文件看成一種代碼倉(cāng)庫(kù),它提供給使用者一些可以直接拿來(lái)用的變量、函數(shù)或類。
- 庫(kù)是特殊的一種程序,編寫庫(kù)的程序和編寫一般的程序區(qū)別不大,只是庫(kù)不能單獨(dú)運(yùn)行。
- 庫(kù)文件有兩種,靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)(共享庫(kù)),區(qū)別是:靜態(tài)庫(kù)在程序的鏈接階段被復(fù)制到了程序中;動(dòng)態(tài)庫(kù)在鏈接階段沒(méi)有被復(fù)制到程序中,而是程序在運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存中供程序調(diào)用。
靜態(tài)庫(kù)的制作
靜態(tài)庫(kù):GCC 進(jìn)行鏈接時(shí),會(huì)把靜態(tài)庫(kù)中代碼打包到可執(zhí)行程序中
動(dòng)態(tài)庫(kù)的制作
動(dòng)態(tài)庫(kù):GCC 進(jìn)行鏈接時(shí),動(dòng)態(tài)庫(kù)的代碼不會(huì)被打包到可執(zhí)行程序中。
程序啟動(dòng)之后,動(dòng)態(tài)庫(kù)會(huì)被動(dòng)態(tài)加載到內(nèi)存中,通過(guò) ldd (list dynamic
dependencies)命令檢查動(dòng)態(tài)庫(kù)依賴關(guān)系
linux中查找動(dòng)態(tài)庫(kù)的順序
當(dāng)系統(tǒng)加載可執(zhí)行代碼時(shí)候,能夠知道其所依賴的庫(kù)的名字,但是還需要知道絕對(duì)路徑。此時(shí)就需要系統(tǒng)的動(dòng)態(tài)載入器來(lái)獲取該絕對(duì)路徑。對(duì)于elf格式的可執(zhí)行程序,是由ld-linux.so來(lái)完成的,它先后搜索elf文件的 DT_RPATH段 ——> 環(huán)境變量LD_LIBRARY_PATH ——>/etc/ld.so.cache文件列表 ——> /lib/,/usr/lib目錄找到庫(kù)文件后將其載入內(nèi)存。