所謂程式庫,一般是軟體作者為了發布方便、替換方便或二次開發目的,而發布的一組可以單獨與應用程式進行compile time或runtime鏈結的二進位制可重定位目標碼檔案。通俗一點說,所謂乙個庫,就是乙個檔案,這個檔案可以在編譯時由編譯器直接鏈結到可執行程式中,也可以在執行時由作業系統的runtime
enviroment根據需要動態載入到記憶體中。一組庫,就形成了乙個發布包,當然,具體發布多少個庫,完全由庫提供商自己決定。
所謂靜態庫,就是在靜態編譯時由編譯器到指定目錄尋找並且進行鏈結,一旦鏈結完成,最終的可執行程式中就包含了該庫檔案中的所有有用資訊,包括**段、資料段等。所謂動態庫,就是在應用程式執行時,由作業系統根據應用程式的請求,動態到指定目錄下尋找並裝載入記憶體中,同時需要進行位址重定向。 win32平台下,靜態庫通常字尾為.lib,動態庫為.dll
linux平台下,靜態庫通常字尾為.a,動態庫為.so 從本質上來說,由同一段程式編譯出來的靜態庫和動態庫,在功能上是沒有區別的。不同之處僅僅在於其名字上,也就是「靜態」和「動態」。 由上面的介紹不難看出,相對於動態庫,靜態庫的優點在於直接被鏈結進可執行程式中,之後,該可執行程式就不再依賴於執行環境的設定了(當然仍然會依賴於 cpu指令集和作業系統支援的可執行檔案格式等硬性限制)。而動態庫的優點在於,使用者甚至可以在程式執行時隨時替換該動態庫,這就構成了動態外掛程式系統的基礎。 具體使用靜態庫和動態庫,由程式設計師根據需要自己決定。
另外,需要說明的一點是,從底層實現上,動態庫的效率可能會比靜態庫稍差一點點,注意,這裡用了「可能」二字,具體差不差,還得看寫程式的人。之所以可能會差,主要原因在於,程式總無法直接呼叫動態庫中的函式符號,而只能通過呼叫作業系統的runtime enviroment介面來動態載入某個函式符號,同時獲得該函式符號在記憶體中的位址,將其儲存為函式指標進行呼叫,這就在函式呼叫時增加了一次間接定址的過程。
什麼是庫 library
討論 http www.opencv.org.cn forum viewtopic.php?f 1 t 4647 start 0 st 0 sk t sd a 隱藏 編輯 所謂程式庫,一般是軟體作者為了發布方便 替換方便或二次開發目的,而發布的一組可以單獨與應用程式進行compile time或ru...
什麼是python的庫 什麼是python標準庫
什麼是python標準庫 閱讀 72 python 標準庫非常龐大,所提供的元件涉及範圍十分廣泛,正如以下內容目錄所顯示的。這個庫包含了多個內建模組 以 c 編寫 常用的python標準庫,個人認為分為三類 7大程式設計常用,第三方庫以及常用的科學計算庫.常用的7大庫有 os 作業系統 time 時...
什麼是lib庫
lib有兩種,一種是靜態庫,比如c runtime庫,這種lib中有函式的實現 一般用在靜態連編上,它是將lib中的 加入目標模組 exe或者dll 檔案中,所以鏈結好了之後,lib檔案就沒有用了。一種lib是和dll配合使用的,裡面沒有 在dll中,這種lib是用在靜態呼叫dll上的,所以起的作用...