天天看點

動态連結庫與靜态連結庫

1 靜态連結庫的優點 

 (1) 代碼裝載速度快,執行速度略比動态連結庫快; 

 (2) 隻需保證在開發者的計算機中有正确的.LIB檔案,在以二進制形式釋出程式時不需考慮在使用者的計算機上.LIB檔案是否存在及版本問題,可避免DLL地獄等問題。 

2 動态連結庫的優點 

 (1) 更加節省記憶體并減少頁面交換;

 (2) DLL檔案與EXE檔案獨立,隻要輸出接口不變(即名稱、參數、傳回值類型和調用約定不變),更換DLL檔案不會對EXE檔案造成任何影響,因而極大地提高了可維護性和可擴充性;

 (3) 不同程式設計語言編寫的程式隻要按照函數調用約定就可以調用同一個DLL函數;

 (4)适用于大規模的軟體開發,使開發過程獨立、耦合度小,便于不同開發者和開發組織之間進行開發和測試。

3 不足之處

 (1) 使用靜态連結生成的可執行檔案體積較大,包含相同的公共代碼,造成浪費;

 (2) 使用動态連結庫的應用程式不是自完備的,它依賴的DLL子產品也要存在,如果使用載入時動态連結,程式啟動時發現DLL不存在,系統将終止程式并給出錯誤資訊。而使用運作時動态連結,系統不會終止,但由于DLL中的導出函數不可用,程式會加載失敗;速度比靜态連結慢。當某個子產品更新後,如果新子產品與舊的子產品不相容,那麼那些需要該子產品才能運作的軟體,統統撕掉。這在早期Windows中很常見。

還有一點差別:

靜态庫在程式編譯時會被連接配接到目标代碼中,程式運作時将不再需要該靜态庫。

動态庫在程式編譯時并不會被連接配接到目标代碼中,而是在程式運作是才被載入,是以在程式運作時還需要動态庫存在。

靜态庫是指編譯連結時,把庫檔案的代碼全部

加載到可執行檔案中,是以生成的檔案比較大,但在運作時也就不再需要庫檔案了。其後