⑴ windows中LIB和DLL的區別與使用
關於lib和dll的區別如下:
(1)lib是編譯時用到的,dll是運行時用到的。如果要完成源代碼的編譯,只需要lib;如果要使動態鏈接的程序運行起來,只需要dll。
(2)如果有dll文件,那麼lib一般是一些索引信息,記錄了dll中函數的入口和位置,dll中是函數的具體內容;如果只有lib文件,那麼這個lib文件是靜態編譯出來的,索引和實現都在其中。使用靜態編譯的lib文件,在運行程序時不需要再掛動態庫,缺點是導致應用程序比較大,而且失去了動態庫的靈活性,發布新版本時要發布新的應用程序才行。
(3)動態鏈接的情況下,有兩個文件:一個是LIB文件,一個是DLL文件。LIB包含被DLL導出的函數名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到DLL文件。在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中相應函數代碼的地址,從而節省了內存資源。DLL和LIB文件必須隨應用程序一起發行,否則應用程序會產生錯誤。如果不想用lib文件或者沒有lib文件,可以用WIN32 API函數LoadLibrary、GetProcAddress裝載。
⑵ lib鏂囦歡鏄浠涔鐢佃剳鎵撳紑lib鏂囦歡鐨勬柟娉
LIB鏂囦歡鏄涓縐嶅簱鏂囦歡錛岄氬父鍖呭惈浜嗕竴緇勮緙栬瘧榪囩殑浠g爜錛屼緵紼嬪簭鍦ㄨ繍琛屾椂璋冪敤銆傝佹墦寮LIB鏂囦歡錛屼竴鑸闇瑕佺壒瀹氱殑寮鍙戝伐鍏鋒垨杞浠訛紝濡傜紪璇戝櫒鎴栭泦鎴愬紑鍙戠幆澧冿紙IDE錛夈
LIB鏂囦歡鏄緙栫▼涓甯哥敤鐨勪竴縐嶆枃浠剁被鍨嬶紝鐗瑰埆鏄鍦ㄤ嬌鐢–鎴朇++絳夎璦榪涜屽紑鍙戞椂銆侺IB鏂囦歡閫氬父鍖呭惈浜嗙▼搴忎腑闇瑕佺殑鍑芥暟鎴栧彉閲忕殑瀹炵幇錛岃繖浜涘疄鐜拌緙栬瘧鎴愪簡浜岃繘鍒朵唬鐮侊紝騫跺瓨鍌ㄥ湪LIB鏂囦歡涓銆傚綋紼嬪簭闇瑕佽皟鐢ㄨ繖浜涘嚱鏁版垨鍙橀噺鏃訛紝灝變細閾炬帴鍒癓IB鏂囦歡錛屼粠鑰屼嬌鐢ㄥ叾涓鐨勪唬鐮併
鐢變簬LIB鏂囦歡鏄浜岃繘鍒舵枃浠訛紝鍥犳や笉鑳界洿鎺ョ敤鏅閫氱殑鏂囨湰緙栬緫鍣ㄦ墦寮銆傝佹煡鐪嬫垨緙栬緫LIB鏂囦歡鐨勫唴瀹癸紝闇瑕佷嬌鐢ㄤ笓闂ㄧ殑寮鍙戝伐鍏鋒垨杞浠躲備緥濡傦紝鍦–鎴朇++寮鍙戜腑錛屽父鐢ㄧ殑緙栬瘧鍣ㄥ侴CC鎴朇lang錛屼互鍙婇泦鎴愬紑鍙戠幆澧冿紙IDE錛夊俈isual Studio鎴朇ode::Blocks錛岄兘鏀鎸佸筁IB鏂囦歡鐨勬搷浣溿傞氳繃榪欎簺宸ュ叿錛岀▼搴忓憳鍙浠ユ煡鐪婰IB鏂囦歡涓鐨勭﹀彿琛ㄣ佸嚱鏁板畾涔夌瓑淇℃伅錛屼篃鍙浠ュ皢LIB鏂囦歡閾炬帴鍒頒粬浠鐨勯」鐩涓錛屼互渚垮湪榪愯屾椂浣跨敤鍏朵腑鐨勪唬鐮併
闄や簡緙栫▼寮鍙戝栵紝LIB鏂囦歡榪樺彲鑳藉湪鍏朵粬棰嗗煙涓浣跨敤銆備緥濡傦紝鍦ㄦ搷浣滅郴緇熸垨椹卞姩紼嬪簭寮鍙戜腑錛孡IB鏂囦歡鍙鑳藉寘鍚浜嗗簳灞傜‖浠舵垨緋葷粺璋冪敤鐨勫疄鐜般傚湪榪欎簺鎯呭喌涓嬶紝鎵撳紑LIB鏂囦歡鍙鑳介渶瑕佹洿鍔犱笓涓氱殑宸ュ叿鎴栫煡璇嗐
鎬葷殑鏉ヨ達紝LIB鏂囦歡鏄緙栫▼涓閲嶈佺殑璧勬簮鏂囦歡錛屽畠浠鍖呭惈浜嗙▼搴忎腑闇瑕佺殑浠g爜瀹炵幇銆傝櫧鐒禠IB鏂囦歡涓嶈兘鐩存帴鐢ㄦ櫘閫氱殑鏂囨湰緙栬緫鍣ㄦ墦寮錛屼絾閫氳繃浣跨敤涓撻棬鐨勫紑鍙戝伐鍏鋒垨杞浠訛紝紼嬪簭鍛樺彲浠ユ柟渚垮湴鏌ョ湅鍜屼嬌鐢ㄥ叾涓鐨勫唴瀹廣
⑶ 很多編譯器都有個LIB文件夾,裡面有很多.lib文件,它們的作用是什麼
.lib文件是程序的二進制庫文件,編譯器連接程序是一般會用到.
如:
main()
{
printf("abc");
}
在這個程序中,你是不用編寫輸出函數代碼的,直接調用printf()函數的就可以輸出字元串了.printf()函數的二進制代碼就是在.lib文件中,只是程序編譯後,把它的二進制代碼加到了本常式序中.
在TC2.0下,.lib文件可以用tlib.exe程序建立.
⑷ 使用lib使用源代碼編譯差異
c
Lib Dll 差異 調用
wq_T
轉載
關注
0點贊·2169人閱讀
動態鏈接庫的Lib文件與Dll文件的作用
(1)lib是編譯時需要的,dll是運行時需要的。
如果要完成源代碼的編譯,有lib就夠了。
如果要使動態連接的程序運行起來,有dll就夠了。
在開發和調試階段,當然最好都有。
(2)在動態庫的情況下,有兩個文件,一個是引入庫(.LIB)文件,一個是DLL文件,引入庫文件(.LIB)包含被DLL導出的函數的名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到所需要使用的DLL文件,庫中的函數和數據並不復制到可執行文件中,因此在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的內存地址,這樣當一個或多個應用程序運行是再把程序代碼和被調用的函數代碼鏈接起來,從而節省了內存資源。
如果只有lib文件,那麼這個lib文件是靜態編譯出來的,索引和實現都在其中。靜態編譯的lib文件有好處:給用戶安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程序比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新的應用程序才行。
⑸ lib文件是什麼是不是編譯自動生成我不加lib文件運行不了
lib文件是靜態庫,這種文件中有頭文件中聲明的函數的實現代碼,一般用在靜態連編上,編譯鏈接時,將lib文件與其他模塊編譯生成的目標代碼鏈接,從而形成能夠運行的可執行文件。
#pragma comment(lib, "pcc32_vc6.lib")就是連入一個庫文件,表示鏈接pcc32_vc6.lib這個靜態庫文件來生成可執行文件。
⑹ lib文件是什麼
.lib是一種文件名後綴,該文件為Windows操作系統中的庫文件,相當於Linux中的·a或·o、.so文件。
lib文件通過編譯才可以使用,編譯分靜態與動態之分。
靜態編譯
靜態lib將導出聲明和實現都放在lib中。編譯後所有代碼都嵌入到宿主程序。
動態編譯
動態lib相當於一個h文件,是對實現部分(.dll文件)的導出部分的聲明。編譯後只是將導出聲明部分編譯到宿主程序中,運行時候需要相應的dll文件支持。
⑺ Keil的編譯錯誤問題
根據LENGTH:082BH(2K)分析,ERROR L107錯誤的出現應該是你使用的Keil軟體是一個評估軟體(對代碼有2K長度的限制)。
至於在選擇的目標文件(就是存放這些C程序代碼的文件)裡面多了很多無用的C、H、LIB文件,只要裡面的函數名和全局變數不同名並且不違背C51的語法,是不會影響程序的編譯和運行的。C5會自動的把未被調用的函數和未使用的變數刪除以減小代碼的長度。