image.png
總結(jié):
1.一個(gè)靜態(tài)界面庫(kù):libwidget.a 由如下表的 {方塊.o菇绵,園.o苗胀,三角形.0} 文件編譯而成:
界面 | 編譯文件 | 函數(shù)API |
---|---|---|
方塊 | 方塊.o | get1() |
園 | 園.o | get2() |
三角形 | 三角形.o | get3() |
- 一個(gè)main.c 鏈接了靜態(tài)庫(kù) libwidget.a, 使用了 get1() 來(lái)獲取方塊的界面
鏈接器操作步驟
gcc -static main.c -L libwidget.a -> 在鏈接之前main.c 已為 main.o
集合 |
---|
E(放可重入的目標(biāo)文件->最后整合所有元素->可執(zhí)行目標(biāo)文件) |
U(放未定義的符號(hào)) |
D(放定義的符號(hào)) |
#######################################################################
#######################################################################
鏈接器 |
---|
1. 輸入文件:存檔文件libwidget.a态兴、 可重入目標(biāo)文件 main.0 |
2. 處理可重入目標(biāo)文件main.o,將main.o放入集合E,將其未定義的符號(hào)放入U(xiǎn)腿堤,定義的放入D |
3. 處理libwidget.a這個(gè)存檔文件椰憋,順序的一個(gè)個(gè)解析靜態(tài)庫(kù)存檔文件集合中每個(gè)xxx.o,若出現(xiàn)U中符號(hào)的定義腕唧,則去除U中的未定義或辖,并把定義放入D,最后將此 xxx.o 放入E枣接,直到所有文件解析結(jié)束 |
4. 查看集合U中是否為空颂暇, 空 ——> 正確 ——> 將E中所有元素整合成可執(zhí)行目標(biāo)文件; 不空——>保持終止運(yùn)行——>常見(jiàn)的 undefine reference to xxx |