1. 程式人生 > >動態加載vs靜態加載

動態加載vs靜態加載

獨立 重要 arch archive 數據 啟動 dll cpp 開發人員

動態加載:

1:靈活,可以在需要的時候用LoadLibrary進行加載,在不需要的時候用FreeLibrary進行卸載,這樣可以不必占用內存。 2:可以在沒有dll時候發現,而不致程序報錯。 3:加載程序中有條件才運行的庫。 4:熱更新,在不停止程序的前提下進行更新。 5:復雜一些,需要顯示獲得函數地址。 6:dll沒有對應的lib文件,此時只能進行動態加載。 靜態加載: 1:簡單方便 2:沒有dll時,系統報錯 3:加載運行很久的庫 4:dll必需有相應的lib文件
加載方法: 1、確保有a.dll和a.lib,兩個文件都有的話可以用靜態加載的方式。
2、在.cpp文件中通過#pragma comment(lib, "a.lib") 加載lib,並包含相應的頭文件,就可以使用dll中的函數了~ 所謂"程序庫",簡單說,就是包含了數據和執行碼的文件。其不能單獨執行,可以作為其它執行程序的一部分,來完成執行功能。庫的存在,可以使得程序模塊化,可以加快程序的再編譯,可以實現代碼重用,可以使得程序便於升級。
程序庫可分三類:靜態庫,共享庫和動態加載庫。
靜態庫,是在執行程序運行前就已經加入到執行碼中,在物理上成為執行程序的一部分;共享庫,是在執行程序啟動時加載到執行程序中,可以被多個執行程序共享使用。動態加載庫,其實並不是一種真正的庫類型,應該是一種庫的使用技術,應用程序可以在運行過程中隨時加載和使用庫。
建議庫開發人員創建共享庫,比較明顯的優勢在於庫是獨立的,便於維護和更新;而靜態庫的更新比較麻煩,一般不做推薦。然而,它們又各有優點,後面會講到。在C++編程中,要使用動態加載技術,需要參考文章"C++ dlopen MINI-Howto"。

靜態庫可以認為是一些目標代碼的集合。按照習慣,一般以".a"做為文件後綴名。使用ar(archiver)命令可以創建靜態庫。因為共享庫有著更大的優勢,靜態庫已經不被經常使用。但靜態庫使用簡單,仍有使用的余地,並會一直存在。
靜態庫在應用程序生成時,可以不必再編譯,節省再編譯時間。但在編譯器越來越快的今天,這一點似乎已不重要。如果其他開發人員要使用你的代碼,而你又不想給其源碼,提供靜態庫是一種選擇。從理論上講,應用程序使用了靜態庫,要比使用動態加載庫速度快1-5%,但由於莫名的原因,實際上可能並非如此。由此看來,除了使用方便外,靜態庫可能並非一種好的選擇。

動態加載vs靜態加載