linux調用庫的方式有三種:
1.靜态鍊接庫
2.動态鍊接庫
3.動态加載庫
其中1,2都是在編程時直接調用,在鍊接時加參數-l進行鍊接
第三種需要在編程時使用dlopen等函數來獲取庫裡面函數的定義,然後進行調用.
不過對于沒有提供頭文件的動态庫,隻能dlopen等函數來調用
linux動态庫和靜态庫的區别?動态鍊接庫和靜态鍊接庫一般是編譯集成一系列的接口(函數)
在程序源代碼編譯完成後通過編譯器編譯并通過鍊接器與這些庫進行鍊接
動态鍊接庫與靜态鍊接庫的區别在于鍊接器在進行鍊接時靜态庫會被直接編譯進程序裡
而動态鍊接庫并不會,我們這裡将這些鍊接庫稱作依賴(動态庫和靜态庫)
程序的運行需要這些依賴,程序在靜态鍊接後該程序本身便已包含該依賴
而動态鍊接後的程序本身本不包含該依賴,這些依賴需要執行者自行安裝進操作系統(動态庫、運行時庫)
程序運行時會動态地加載這些庫
linux上動态庫一般的後綴後為.so
靜态庫一般的後綴為.a
由于靜态鍊接會直接将庫編譯進程序裡所以靜态編譯後的程序相較于動态鍊接所要大
這就是因為靜态鍊接會将鍊接庫編譯進程序裡的原因,所以占用就要大了
出于這種原因,靜态庫不易于維護與更新,如果鍊接庫中有實現有bug等需要更新則需要更新整個程序,因為靜态庫被編譯進程序中了
但動态庫就沒有這種情況了,因為動态庫是程序運行時動态加載的,所以我們隻需要更新動态庫而不需要更新所有依賴該庫的程序(軟件)
另一方面,很多程序的開發都會使用到相同的鍊接庫,也就是很多程序(軟件)會有相同的依賴
如果将這些依賴全部靜态編譯的話将會造成存儲資源占用過多而造成資源浪費
而使用動态庫的方式這些程序(軟件)則可以共享一個鍊接庫,而不需要每個程序都帶一個鍊接庫,這樣就大大地減少了存儲資源占用空間
總結以上是真正的電腦專家為你收集整理的linux動态庫鍊接順序(linux 動态庫 鍊接)的全部内容,希望文章能夠幫你解決所遇到的問題。
如果覺得真正的電腦專家網站内容還不錯,歡迎将真正的電腦專家推薦給好友。
有話要說...