函數和數據被編譯進一個二進制文件(一般擴展名爲.LIB)。程序員
靜態庫:windows
在使用靜態庫的狀況下,在編譯連接可執行文件時,連接器從庫中複製這些函數和數據並把它們和應用程序的其它模塊組合起來建立最終的可執行文件(.EXE文件)。在多個一樣的程序執行時,系統保留了許多重複的代碼副本,形成內存資源浪費。函數
動態庫:接口
使用動態庫時,有一個引入庫lib和一個DLL。引入庫lib包含被DLL導出的函數和變量的符號名,DLL包含實際的函數和數據。在編譯連接可執行文件時,只須要連接引入庫,DLL中的函數代碼和數據並不複製到可執行文件中,在運行的時候,再去加載DLL,訪問DLL中導出的函數。使用DLL的動態連接並非將庫代碼拷貝,只是在程序中記錄了函數的入口點和接口,在程序執行時纔將庫代碼裝入內存;無論多少程序使用DLL,內存中都只有一個DLL的副本;當沒有程序使用它時,系統就將它移出內存,減小了對內存和磁盤的要求。內存
靜態庫中不能再包含其餘的動態或靜態庫,而動態庫則能夠。資源
編譯器尋找庫文件的順序是編譯器
一、程序員指定的庫文件目錄編譯
二、當前工程的工程目錄class
三、windows目錄變量
四、system32
五、系統的環境變量
待續,而後接着說動態連接庫加載的隱式連接和顯式連接。