LIB文件中存放的是函數調用的信息,值得一提的是數據庫有靜態數據庫(.lib文件)和動態數據庫(.dll文件)。
靜態編譯
靜態編譯將導出聲明和實現都放在lib中。編譯后所有代碼都嵌入到宿主程序。
靜態編譯的優點是編寫出來的程序不需要調用DLL和載入函數,直接可以當成程序的一部分來使用。
靜態編譯的缺點也是顯而易見的,使用靜態編譯的程序體積會比動態編譯大,原因是函數的實現被嵌入為程序代碼的一部分。
動態編譯
動態LIB文件相當於一個C語言中的h文件,是函數導出部分的聲明,而不將實現過程嵌入到程序本身中,編譯后只是將函數地址存在宿主程序中,運行到調用函數是調用DLL並載入函數來實現函數的具體操作。
與dll區別
(1)lib是編譯時需要的,dll是運行時需要的。
如果要完成源代碼的編譯,有lib就夠了。
如果要使動態連接的程序運行起來,有dll就夠了。
在開發和調試階段,當然最好都有。
(2)一般的動態庫程序有lib文件和dll文件。lib文件是必須在編譯期就連接到應用程序中的,而dll文件是運行期才會被調用的。如果有dll文件,那么對應的lib文件一般是一些索引信息,具體的實現在dll文件中。如果只有lib文件,那么這個lib文件是靜態編譯出來的,索引和實現都在其中。靜態編譯的lib文件有好處:給用戶安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程序比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新的應用程序才行。
(3)在動態庫的情況下,有兩個文件,一個是引入庫(.LIB)文件,一個是DLL文件,引入庫文件包含被DLL導出的函數的名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到所需要使用的DLL文件,庫中的函數和數據並不復制到可執行文件中,因此在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的內存地址,這樣當一個或多個應用程序運行時再把程序代碼和被調用的函數代碼鏈接起來,從而節省了內存資源。從上面的說明可以看出,DLL文件必須隨應用程序一起發行,否則應用程序將會產生錯誤。
