成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

如何生成靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)?

庫(kù)是由一組目標(biāo)文件聚合而成的文件,目標(biāo)文件通過(guò)源文件編譯得到。對(duì)于C語(yǔ)言,目標(biāo)文件包含了若干數(shù)據(jù)結(jié)構(gòu)和函數(shù),但不能包含main函數(shù)。庫(kù)有兩種類型:靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。靜態(tài)庫(kù)是指在編譯時(shí)將庫(kù)鏈接進(jìn)可執(zhí)行文件

庫(kù)是由一組目標(biāo)文件聚合而成的文件,目標(biāo)文件通過(guò)源文件編譯得到。對(duì)于C語(yǔ)言,目標(biāo)文件包含了若干數(shù)據(jù)結(jié)構(gòu)和函數(shù),但不能包含main函數(shù)。庫(kù)有兩種類型:靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。

靜態(tài)庫(kù)是指在編譯時(shí)將庫(kù)鏈接進(jìn)可執(zhí)行文件中,每次執(zhí)行程序時(shí)都會(huì)使用這個(gè)庫(kù)的一個(gè)副本。動(dòng)態(tài)庫(kù)則在運(yùn)行時(shí)加載進(jìn)內(nèi)存,不會(huì)像靜態(tài)庫(kù)那樣被復(fù)制多份,因此動(dòng)態(tài)庫(kù)可以被多個(gè)程序共享。本文將以gcc工具為例,介紹如何生成靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。

一、如何生成靜態(tài)庫(kù)

1. 準(zhǔn)備兩個(gè)源文件s1.c和s2.c,以及相應(yīng)的頭文件s1.h和s2.h。

2. 從s1.c和s2.c生成靜態(tài)庫(kù)libs12.a:

(1)執(zhí)行指令“gcc -c s1.c s2.c”生成目標(biāo)文件:s1.o、s2.o

(2)執(zhí)行指令“ar cr libs12.a s1.o s2.o”生成靜態(tài)庫(kù):libs12.a

3. 準(zhǔn)備測(cè)試文件main.c并編譯連接靜態(tài)庫(kù)libs12.a:

(1)執(zhí)行指令“gcc -c main.c”生成目標(biāo)文件:main.o

(2)執(zhí)行指令“gcc -o s12.exe main.o libs12.a”生成可執(zhí)行文件s12.exe

(3)執(zhí)行生成的s12.exe可驗(yàn)證成功連接靜態(tài)文件

二、如何生成動(dòng)態(tài)庫(kù)

1. 從s1.c和s2.c生成動(dòng)態(tài)庫(kù):

(1)執(zhí)行指令“gcc -fPIC -shared s1.c s2.c -o ”生成動(dòng)態(tài)庫(kù):

其中-fPIC選項(xiàng)用于告訴編譯器生成與位置無(wú)關(guān)的代碼,這對(duì)于動(dòng)態(tài)庫(kù)非常重要。

2. 編譯測(cè)試文件main.c并鏈接動(dòng)態(tài)庫(kù)

(1)執(zhí)行指令“gcc -c main.c”生成目標(biāo)文件:main.o

(2)執(zhí)行指令“gcc -o s12 main.o -L./ -l s12”生成可執(zhí)行文件s12

其中-L選項(xiàng)用于告訴編譯器在當(dāng)前目錄下查找動(dòng)態(tài)庫(kù),-l選項(xiàng)則指定要鏈接的庫(kù)的名稱,注意此處不需要寫(xiě)上“l(fā)ib”和“.so”后綴。

(3)執(zhí)行生成的s12可驗(yàn)證成功連接動(dòng)態(tài)文件

總結(jié):

生成靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的方法大致相同,只是在編譯時(shí)需要加入不同的參數(shù)。靜態(tài)庫(kù)在編譯時(shí)將庫(kù)鏈接進(jìn)可執(zhí)行文件中,而動(dòng)態(tài)庫(kù)則在運(yùn)行時(shí)加載進(jìn)內(nèi)存,兩者各自的優(yōu)點(diǎn)和缺點(diǎn)需要根據(jù)實(shí)際情況進(jìn)行選擇。

標(biāo)簽: