什麼叫程序庫什麼是lib,什麼是dll,什麼是.a,什麼是.so,什麼是靜態庫,什麼是動態庫

 

什麼叫程序庫
所謂程序庫,一般是軟件作者爲了發佈方便、替換方便或二次開發目的,而發佈的一組可以單獨與應用程序進行compile time或runtime鏈接的二進制可重定位目標碼文件。通俗一點說,所謂一個庫,就是一個文件,這個文件可以在編譯時由編譯器直接鏈接到可執行程序中,也可以在運行時由操作系統的runtime enviroment根據需要動態加載到內存中。一組庫,就形成了一個發佈包,當然,具體發佈多少個庫,完全由庫提供商自己決定。
 
什麼是lib,什麼是dll,什麼是.a,什麼是.so,什麼是靜態庫,什麼是動態庫
所謂靜態庫,就是在靜態編譯時由編譯器到指定目錄尋找並且進行鏈接,一旦鏈接完成,最終的可執行程序中就包含了該庫文件中的所有有用信息,包括代碼段、數據段等。所謂動態庫,就是在應用程序運行時,由操作系統根據應用程序的請求,動態到指定目錄下尋找並裝載入內存中,同時需要進行地址重定向。 win32平臺下,靜態庫通常後綴爲.lib,動態庫爲.dll linux平臺下,靜態庫通常後綴爲.a,動態庫爲.so 從本質上來說,由同一段程序編譯出來的靜態庫和動態庫,在功能上是沒有區別的。不同之處僅僅在於其名字上,也就是“靜態”和“動態”。由上面的介紹不難看出,相對於動態庫,靜態庫的優點在於直接被鏈接進可執行程序中,之後,該可執行程序就不再依賴於運行環境的設置了(當然仍然會依賴於 CPU指令集和操作系統支持的可執行文件格式等硬性限制)。而動態庫的優點在於,用戶甚至可以在程序運行時隨時替換該動態庫,這就構成了動態插件系統的基礎。具體使用靜態庫和動態庫,由程序員根據需要自己決定。
 
補充說明
另外,需要說明的一點是,從底層實現上,動態庫的效率可能會比靜態庫稍差一點點,注意,這裏用了“可能”二字,具體差不差,還得看寫程序的人。之所以可能會差,主要原因在於,程序總無法直接調用動態庫中的函數符號,而只能通過調用操作系統的runtime enviroment接口來動態載入某個函數符號,同時獲得該函數符號在內存中的地址,將其保存爲函數指針進行調用,這就在函數調用時增加了一次間接尋址的過程。
發佈了79 篇原創文章 · 獲贊 24 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章