動態加載:
1:靈活,能夠在須要的時候用
LoadLibrary進行加載,在不須要的時候用
FreeLibrary進行卸載,
這樣能夠沒必要佔用內存。
2:能夠在沒有dll時候發現,而不致程序報錯。
3:加載程序中有條件才運行的庫。
4:
熱更新,在不中止程序的前提下進行更新。
5:
複雜一些,須要顯示得到函數地址。
6:
dll沒有對應的lib文件,此時只能進行動態加載。
靜態加載:
1:簡單方便
2:
沒有dll時,系統報錯
3:加載運行好久的庫
4:
dll必需有相應的lib文件
加載方法:
一、確保有
a.dll和a.lib,兩個文件都有的話能夠用靜態加載的方式。
二、在.cpp文件中經過#pragma comment(lib, "a.lib") 加載lib,幷包含相應的頭文件,就可使用dll中的函數了~
二、在.cpp文件中經過#pragma comment(lib, "a.lib") 加載lib,幷包含相應的頭文件,就可使用dll中的函數了~
所謂"程序庫",簡單說,
就是包含了數據和執行碼的文件。
其不能單獨執行,能夠做爲其它執行程序的一部分,來完成執行功能。庫的存在,可使得程序模塊化,能夠加快程序的再編譯,能夠實現代碼重用,可使得程序便於升級。
程序庫可分三類: 靜態庫,共享庫和動態加載庫。
靜態庫,是在 執行程序運行前就已經加入到執行碼中,在物理上成爲執行程序的一部分; 共享庫,是在執行程序啓動時加載到執行程序中,能夠被多個執行程序共享使用。 動態加載庫,其實並非一種真正的庫類型,應該是一種庫的使用技術,應用程序能夠在運行過程當中隨時加載和使用庫。
建議庫開發人員建立共享庫,比較明顯的優點在於庫是獨立的,便於維護和更新;而靜態庫的更新比較麻煩,通常不作推薦。然而,它們又各有優勢,後面會講到。在C++編程中,要使用動態加載技術,須要參考文章"C++ dlopen MINI-Howto"。
靜態庫能夠認爲是一些目標代碼的集合。按照習慣,通常以".a"作爲文件後綴名。使用ar(archiver)命令能夠建立靜態庫。由於共享庫有着更大的優點,靜態庫已經不被常常使用。但靜態庫使用簡單,仍有使用的餘地,並會一直存在。
靜態庫在應用程序生成時,能夠沒必要再編譯,節省再編譯時間。但在編譯器愈來愈快的今天,這一點彷佛已不重要。若是其餘開發人員要使用你的代碼,而你又不想給其源碼,提供靜態庫是一種選擇。 從理論上講,應用程序使用了靜態庫,要比使用動態加載庫速度快1-5%,但因爲莫名的緣由,實際上可能並不是如此。由此看來,除了使用方便外,靜態庫可能並不是一種好的選擇。
程序庫可分三類: 靜態庫,共享庫和動態加載庫。
靜態庫,是在 執行程序運行前就已經加入到執行碼中,在物理上成爲執行程序的一部分; 共享庫,是在執行程序啓動時加載到執行程序中,能夠被多個執行程序共享使用。 動態加載庫,其實並非一種真正的庫類型,應該是一種庫的使用技術,應用程序能夠在運行過程當中隨時加載和使用庫。
建議庫開發人員建立共享庫,比較明顯的優點在於庫是獨立的,便於維護和更新;而靜態庫的更新比較麻煩,通常不作推薦。然而,它們又各有優勢,後面會講到。在C++編程中,要使用動態加載技術,須要參考文章"C++ dlopen MINI-Howto"。
靜態庫能夠認爲是一些目標代碼的集合。按照習慣,通常以".a"作爲文件後綴名。使用ar(archiver)命令能夠建立靜態庫。由於共享庫有着更大的優點,靜態庫已經不被常常使用。但靜態庫使用簡單,仍有使用的餘地,並會一直存在。
靜態庫在應用程序生成時,能夠沒必要再編譯,節省再編譯時間。但在編譯器愈來愈快的今天,這一點彷佛已不重要。若是其餘開發人員要使用你的代碼,而你又不想給其源碼,提供靜態庫是一種選擇。 從理論上講,應用程序使用了靜態庫,要比使用動態加載庫速度快1-5%,但因爲莫名的緣由,實際上可能並不是如此。由此看來,除了使用方便外,靜態庫可能並不是一種好的選擇。