1、靜態(tài)庫與動(dòng)態(tài)庫
所謂的庫,其實(shí)都是一些二進(jìn)制的可執(zhí)行文件集合,靜態(tài)庫在linux中一般命名形式為libxxx.a,而動(dòng)態(tài)庫一般常用libxxx.so。
他們都可以通過源文件編譯得到,往期對(duì)這兩種庫都過介紹:
Linux應(yīng)用編程之靜態(tài)庫的制作與使用
Linux應(yīng)用編程之動(dòng)態(tài)庫的制作與使用
Linux應(yīng)用編程之動(dòng)靜態(tài)鏈接庫輔助技巧(ldd,-static)
對(duì)于靜態(tài)庫主要是用于程序編譯的過程中提供相應(yīng)的函數(shù)實(shí)現(xiàn),最終使用到該靜態(tài)庫中的內(nèi)容會(huì)整合到最終的程序中,這樣程序在運(yùn)行過程中就不再依賴外部其他庫了。
而動(dòng)態(tài)庫并不是用于編譯期,而是在運(yùn)行期通過動(dòng)態(tài)加載器來加載庫函數(shù),使得可執(zhí)行程序得以運(yùn)行,當(dāng)然動(dòng)態(tài)鏈接也分不同的加載時(shí)期,相對(duì)比較靈活,有些程序一運(yùn)行就需要進(jìn)行加載,而有些的動(dòng)態(tài)庫是在執(zhí)行過程中加載。
2、動(dòng)靜態(tài)庫優(yōu)缺點(diǎn)
那么動(dòng)態(tài)庫與靜態(tài)庫的優(yōu)缺點(diǎn)也比較明顯,使用靜態(tài)庫編譯生成的可執(zhí)行文件對(duì)外界沒有什么需求,依賴少,相應(yīng)的其可執(zhí)行程序體積變大,一旦修改需要重新編譯。
而對(duì)于動(dòng)態(tài)庫,由于是程序運(yùn)行時(shí)候加載相應(yīng)的動(dòng)態(tài)庫,所以其可執(zhí)行文件相對(duì)要小很多,同時(shí)對(duì)于庫的修改,僅僅編譯和替換相應(yīng)的動(dòng)態(tài)庫即可,更加的方便。
3、Linux中動(dòng)態(tài)庫的查找
由于可執(zhí)行程序依賴動(dòng)態(tài)鏈接庫,所以存在一個(gè)問題:從哪里找動(dòng)態(tài)鏈接庫?,經(jīng)常我們動(dòng)態(tài)編譯的可執(zhí)行應(yīng)用程序,由于系統(tǒng)中、或者自己沒有指定相應(yīng)的庫路徑,就會(huì)報(bào)運(yùn)行失敗,提示缺少相應(yīng)的庫。
這樣就需要在系統(tǒng)中安裝對(duì)應(yīng)的庫,并且把庫放在動(dòng)態(tài)加載器所能搜索到的位置,在linux中有如下幾種搜索路徑:
1、在可執(zhí)行程序編譯的時(shí)候通過編譯選項(xiàng)指定相應(yīng)的動(dòng)態(tài)庫路徑,這樣在程序運(yùn)行的時(shí)候就會(huì)在文件系統(tǒng)對(duì)應(yīng)路徑加載對(duì)應(yīng)的動(dòng)態(tài)庫,比如通過使用-Wl,-rpath=your path來進(jìn)行編譯,編譯成功的可執(zhí)行程序你可以使用ldd命令來查看是否路徑指定成功,可執(zhí)行程序幾乎是第一時(shí)間搜索該路徑查看動(dòng)態(tài)庫是否存在。
2、通過使用環(huán)境變量 : LD_LIBRARY_PATH指定,可以使用如下命令進(jìn)行查看:
1echo $LD_LIBRARY_PATH
通過export在已有的路徑上進(jìn)行添加:
1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your path
跟之前給大家介紹的PATH環(huán)境變量的使用是一致的,當(dāng)可執(zhí)行程序找到指定路徑,會(huì)在該環(huán)境變量中指定的路徑進(jìn)行查找,當(dāng)然修改該環(huán)境變量會(huì)影響到所有的應(yīng)用程序動(dòng)態(tài)加載的搜索。
3、系統(tǒng)默認(rèn)的路徑/lib和/user/lib進(jìn)行搜索,當(dāng)然在用戶級(jí)的程序大部分都會(huì)安裝在/usr/local中,所以用戶級(jí)的庫大部分也會(huì)放在/user/local/lib路徑中。
4、當(dāng)然在Ubuntu中還通常在配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫搜索路徑,不過要記得當(dāng)我們把相應(yīng)的動(dòng)態(tài)庫路徑添加進(jìn)入以后,需要使用ldconfig進(jìn)行配置才能生效。
最 后
好了,這里小哥就簡(jiǎn)單介紹了動(dòng)態(tài)庫與靜態(tài)庫的差異,以及Linux系統(tǒng)一般如何搜索動(dòng)態(tài)庫,本系列文章后續(xù)還會(huì)更新,記得關(guān)注學(xué)習(xí)哦。
-
Linux
+關(guān)注
關(guān)注
87文章
11508瀏覽量
213570 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4379瀏覽量
64748 -
靜態(tài)庫
+關(guān)注
關(guān)注
0文章
21瀏覽量
7615
發(fā)布評(píng)論請(qǐng)先 登錄
Altium Designer找不到元件怎么辦?
找不到服務(wù)器或DNS錯(cuò)誤時(shí)該怎么辦

keil5中找不到或沒有對(duì)應(yīng)的芯片怎么辦?超詳細(xì)?。?/a>

評(píng)論