簡(jiǎn)介L(zhǎng)inux靜態(tài)庫(kù)知識(shí)
對(duì)于Linux系統(tǒng)你了解么?目前,Linux系統(tǒng)越來(lái)越受到電腦用戶的歡迎,于是很多人開始學(xué)習(xí)Linux時(shí),在這期間,你可能會(huì)遇到Linux靜態(tài)庫(kù)的編寫和使用問(wèn)題,這里將介紹Linux靜態(tài)庫(kù)的編寫和使用問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。
1、概述
靜態(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
2、編寫最簡(jiǎn)單的靜態(tài)庫(kù)文件
編寫如下兩個(gè)文件,注意放在同一目錄中
myalib.h//靜態(tài)庫(kù)頭文件
myalib.c//靜態(tài)庫(kù)實(shí)現(xiàn)文件
//myalib.h 文件的內(nèi)容
void test();
//myalib.c 文件的內(nèi)容
- #inlcude <stdio.h>
- void test()
- {
- printf("test\n");
- }
3、制作庫(kù)文件
⑴生成目標(biāo)文件
gcc -c myalib.c
執(zhí)行完后會(huì)生成一個(gè)myalib.o文件
⑵用ar命令歸檔,格式為ar -rc <生成的檔案文件名> <.o文件名列表>
再次提醒,歸檔文件名一定要以lib打頭, .a結(jié)尾。
ar -rc libtest.a myalib.o
執(zhí)行完后會(huì)生成一個(gè)libtest.a文件
4、使用庫(kù)文件
⑴編寫一個(gè)測(cè)試程序main.c,內(nèi)容為
//main.c 測(cè)試靜態(tài)庫(kù)調(diào)用的程序
#include "myalib.h"http://要把函數(shù)的頭文件包含進(jìn)來(lái),否則編譯時(shí)會(huì)報(bào)錯(cuò)
- int main(int argc,char* argv[])
- {
- test();
- return 0;
- }
⑵編譯目標(biāo)文件,注意要把靜態(tài)庫(kù)頭文件的路徑加到-I參數(shù)里面
gcc -I /root/exercise -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/root/exercisemain.o -ltest
此時(shí)就會(huì)生成一個(gè)名為main的可執(zhí)行文件
另外,注意- l參數(shù)好象應(yīng)該加到輸入文件名的后面,否則會(huì)報(bào)錯(cuò)。
比如gcc -o main -L/root/exercise-ltest main.o就會(huì)提示
- main.o(.text+0x11): In function `main':
- : undefined reference to `test'
- collect2: ld returned 1 exit status
原因我還不清楚:-)
⑷執(zhí)行可執(zhí)行文件查看效果
執(zhí)行./main, 輸出
test
說(shuō)明執(zhí)行成功。以上就是Linux靜態(tài)庫(kù)的編寫和使用的簡(jiǎn)介。
【編輯推薦】