Linux中有兩類(lèi)函數(shù)庫(kù),動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù) 靜態(tài)庫(kù): 這類(lèi)庫(kù)一般都是以.a為后綴名的文件,利用靜態(tài)庫(kù)函數(shù)編譯成的文件比較大,因?yàn)檎麄€(gè)函數(shù)庫(kù)的所有數(shù)據(jù)都會(huì)被整合進(jìn)目標(biāo)代碼中。 編譯后的執(zhí)行程序就不需要外部的函數(shù)庫(kù)支持,但也有其缺點(diǎn),就是一旦靜態(tài)函數(shù)庫(kù)改變了,那么程序就必須重新編譯。 動(dòng)態(tài)庫(kù): 這類(lèi)庫(kù)的一般都是以.so為后綴名的,相對(duì)于靜態(tài)庫(kù)函數(shù)庫(kù)來(lái)說(shuō),動(dòng)態(tài)函數(shù)庫(kù)在編譯的時(shí)候并沒(méi)有被編譯進(jìn)目標(biāo)代碼中。當(dāng)程序執(zhí)行到相關(guān)函數(shù)時(shí)才調(diào)用該函數(shù)庫(kù)里的 相應(yīng)函數(shù),因此動(dòng)態(tài)庫(kù)函數(shù)庫(kù)所產(chǎn)生的可執(zhí)行文件比較小,由于函數(shù)庫(kù)沒(méi)有被整合到程序之中,所以這也就少了靜態(tài)庫(kù)鎖有的缺點(diǎn)。
Linux系統(tǒng)中的系統(tǒng)缺省庫(kù)有/lib /usr/lib /usr/local/lib
不管是何種庫(kù)文件,都是由.o文件生成的。 下面我就來(lái)講解下著兩種庫(kù)的生成方法及步驟:
動(dòng)態(tài)庫(kù): 對(duì)咬編譯生成庫(kù)的文件執(zhí)行下面命令即可: #gcc -shared funName.c -o libLibName.so 靜態(tài)庫(kù): #gcc -c funName.c #ar cr libLibName.a funName.o 輕重funName.o是第一步生成的文件
|