1. 程式人生 > >動態連結庫dll和靜態連線庫lib的區別

動態連結庫dll和靜態連線庫lib的區別

          由於專業原因,一直沒有系統的學習過c++。最近在學習opencv,而opencv的配置對於程式設計經驗不豐富的人來說理解起來還是需要一個過程的。opencv配置的設定涉及到兩個很重要的概念:dll和lib。

         首先什麼是dll和lib?

        lib是靜態連結庫,使用它的程式在連結時用庫中被呼叫的程式碼替代被呼叫的函式和資料。

        dll(dynamic link library)的全稱是動態連結庫,是一個包含了可以被多個程式呼叫資料和程式碼的庫。為什麼叫做動態連結呢?相比靜態連結,動態連結的優點是什麼呢?

        靜態連結庫的一個很重要的特點是在連結的時候會替代呼叫的函式資料等,這會帶來兩個問題:

                  1、當靜態連結內容發生改變時,需要重新連結編譯,首先是費時麻煩,如果是自己編的一個小程式的話問題不是很大,但是對於一個商用軟體來說,更新一個庫就需要         重灌整個軟體,效率低下,使用麻煩。

                   2、資源和記憶體開支大,如果一個庫同時被幾個程式使用時,每個程式都需要把這個庫中的程式碼資料載入到記憶體中,造成記憶體重複佔用的問題。

        而動態連結庫則很好的解決了這個問題。dll是一個已經被編譯連結過的庫,因此並不需要再將其包含到呼叫它的程式中。當程式需要使用動態連結庫中的程式碼資源時,直接訪        問動態連結庫。多個程式可以訪問同一個dll,這就大大減少了資源開支。當程式或軟體的某些引數是經常改變的時,可以將此引數放置在動態連結庫中,需要修改引數時僅僅需要替換掉該dll即可,不需要重新編譯整個程式,因此程式的可維護性大大增強。當然動態連結庫也不是全能的,由於dll是可以替換掉的,很多木馬程式就利用這一特性,修改系統的dll,入侵損害電腦。

         想起了一個詞:此消彼長。人總是在做一些折中的選擇,畢竟這個世界絕對的完美是不存在的。如果喜歡一個女孩的美麗,就要接受她的傲慢,如果你喜歡一個女孩的純潔就要接受她的幼稚,如果喜歡一個女孩的率真就要接受她的野蠻。看來程式設計和泡妹子還是有很大共共同性的,那為什麼程式設計師註定要孤獨終生的,鬱悶。