動態加載:
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中的函數了~
2、在.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%,但由于莫名的原因,實際上可能并非如此。由此看來,除了使用方便外,靜態庫可能并非一種好的選擇。?