今天在網(wǎng)上突然搜索到了關(guān)于鏈接庫(kù)如何生成的文章,在平時(shí)接觸到的代碼中也有這方面的應(yīng)用,于是看了看,還是決定收藏在我的blog中,以后可以多看看,具體的內(nèi)容如下:
如果程序是在編譯時(shí)加載庫(kù)文件的,就是使用了靜態(tài)庫(kù)。如果是在運(yùn)行時(shí)加載目標(biāo)代碼,就成為動(dòng)態(tài)庫(kù)。換句話說(shuō),如果是使用靜態(tài)庫(kù),則靜態(tài)庫(kù)代碼在編譯時(shí)就拷貝到了程序的代碼段,程序的體積會(huì)膨脹。如果使用動(dòng)態(tài)庫(kù),則程序中只保留庫(kù)文件的名字和函數(shù)名,在運(yùn)行時(shí)去查找?guī)煳募秃瘮?shù)體,程序的體積基本變化不大
靜態(tài)庫(kù)的原則是“以空間換時(shí)間”,增加程序體積,減少運(yùn)行時(shí)間
動(dòng)態(tài)庫(kù)的原則是“以時(shí)間換空間”,增加了運(yùn)行時(shí)間,但減少了程序本身的體積
靜態(tài)庫(kù)文件的擴(kuò)展名一般為.a,其編寫步驟很簡(jiǎn)單
⑴編寫函數(shù)代碼
⑵編譯生成各目標(biāo)文件
⑶用ar文件對(duì)目標(biāo)文件歸檔,生成靜態(tài)庫(kù)文件
注意歸檔文件名必須以lib打頭
使用要點(diǎn):
⑴在gcc 的-I參數(shù)后加上靜態(tài)庫(kù)頭文件的路徑
⑵在gcc 的-L參數(shù)后加上庫(kù)文件所在目錄
⑶在gcc 的-l參數(shù)后加上庫(kù)文件名,但是要去掉lib和.a擴(kuò)展名
比如庫(kù)文件名是libtest.a 那么參數(shù)就是 -l test
制作庫(kù)文件
⑴生成目標(biāo)文件
gcc -c myprogram.c
執(zhí)行完后會(huì)生成一個(gè)myprogram.o文件
⑵用ar命令歸檔,格式為ar -rc <生成的檔案文件名> <.o文件名列表>
再次提醒,歸檔文件名一定要以lib打頭, .a結(jié)尾。
ar -rc libmyprogram.a myprogram.o
執(zhí)行完后會(huì)生成一個(gè)libmyprogram.a文件
編譯目標(biāo)文件,注意要把靜態(tài)庫(kù)頭文件的路徑加到-I參數(shù)里面
gcc -I/directory/to/include -o main.o -c main.c
現(xiàn)在生成了一個(gè)main.o文件
生成可執(zhí)行文件,注意要把靜態(tài)庫(kù)文件的路徑加到-L參數(shù)里面,
把庫(kù)文件名(去掉打頭的lib和結(jié)尾的.a)加到-l參數(shù)后面。如下面所示
gcc -o main -L/directory/to/lib main.o -lmyprogram
此時(shí)就會(huì)生成一個(gè)名為main的可執(zhí)行文件
另外,注意- l參數(shù)好象應(yīng)該加到輸入文件名的后面,否則會(huì)報(bào)錯(cuò)
上面的就是靜態(tài)庫(kù)的操作方法,也是平時(shí)比較多的用到的,另外一個(gè)動(dòng)態(tài)庫(kù)就暫時(shí)不去學(xué)習(xí)了,等用到了再說(shuō)了,網(wǎng)上的資料很多.......
posted on 2007-11-17 22:00
LG 閱讀(1163)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
UnixProgram