程序的加載與鏈接(五) 靜態(tài)庫鏈接

前面我們已經(jīng)了解到了多個點.o文件是怎么鏈接的,今天關注一下靜態(tài)庫的結構和鏈接的過程。
先寫個簡單的靜態(tài)庫

// DemoFramework.h
#import <Foundation/Foundation.h>

@interface DemoFramework : NSObject

@end

// DemoFramework.m
#import "DemoFramework.h"

@implementation DemoFramework


- (void)codingLife {
    NSLog(@"codingLife");
}

@end

// GoodBoy.h
#import <Foundation/Foundation.h>



@interface GoodBoy : NSObject
- (void)xuanGao;
@end

// GoodBoy.m
#import "GoodBoy.h"

@implementation GoodBoy


- (void)xuanGao {
    NSLog(@"落葉方知秋");
}

@end


好了編譯一下生成.a文件来氧,MachOView ,查看一下.a文件

屏幕快照 2019-10-30 上午11.02.30.png

這里可以看到有兩個對應.o文件,

  • start : !<arch>\n 類似于魔書舒憾,這樣人家就知道這是一個.a文件使用.a文件的結構解析它

  • SymTab Header: 符號表頭部

    • size: 符號表的大小
  • Symbol Tabel: 符號表 ,這里的符號表只暴露了一些類的符號表,細節(jié)的符號表藏在.o文件中

  • Object header : .o文件頭部信息

  • .o 文件

  • MachOView 會crash居灯,記得把修改UI的操作調(diào)用到主線程即可祭务,也可以選擇命令行工具

現(xiàn)在嘗試使用一下這個.a文件

#import "ViewController.h"
#import "GoodBoy.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [[GoodBoy new] xuanGao];

}


@end

這里只import "GoodBoy.h" 以及使用GoodBoy Class。 使用Hopper Disassembler查看一下app執(zhí)行文件

屏幕快照 2019-10-30 上午11.07.02.png

這里可以看到
[GoodBoy xuanGao] 符號怪嫌,卻找不到 [DemoFramework codingLife] 符號义锥,所以推測在鏈接時候DemoFramework.o文件并沒有鏈接進入執(zhí)行文件.
修改一下code

#import "ViewController.h"
#import "GoodBoy.h"
#import "DemoFramework.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [[GoodBoy new] xuanGao];

}


再次反匯編執(zhí)行文件發(fā)現(xiàn)同樣的結果,可見import 不會對最終結果產(chǎn)生影響

再次修改code岩灭,這次開始使用DemoFramework 對象

#import "ViewController.h"
#import "GoodBoy.h"
#import "DemoFramework.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [[GoodBoy new] xuanGao];
   NSLog(@"%@",[DemoFramework new]);
}


@end


再觀察一下拌倍,這次可以找到codingLife的符號表


屏幕快照 2019-10-30 上午11.13.58.png

結論: 靜態(tài)庫是一系列.o文件的集合,只有被執(zhí)行文件所使用的.o文件才會最終綁定到執(zhí)行文件上面噪径。這么做有利于減少執(zhí)行文件的大小柱恤。

: 可以觀察最后執(zhí)行文件的大小得到同樣的結果。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末找爱,一起剝皮案震驚了整個濱河市梗顺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌车摄,老刑警劉巖寺谤,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吮播,居然都是意外死亡变屁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門薄料,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敞贡,“玉大人,你說我怎么就攤上這事摄职√芤郏” “怎么了获列?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛔垢。 經(jīng)常有香客問我击孩,道長,這世上最難降的妖魔是什么鹏漆? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任巩梢,我火速辦了婚禮,結果婚禮上艺玲,老公的妹妹穿的比我還像新娘括蝠。我一直安慰自己,他們只是感情好饭聚,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布忌警。 她就那樣靜靜地躺著,像睡著了一般秒梳。 火紅的嫁衣襯著肌膚如雪法绵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天酪碘,我揣著相機與錄音朋譬,去河邊找鬼。 笑死兴垦,一個胖子當著我的面吹牛徙赢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播探越,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼犀忱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扶关?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤数冬,失蹤者是張志新(化名)和其女友劉穎节槐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拐纱,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡铜异,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秸架。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揍庄。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖东抹,靈堂內(nèi)的尸體忽然破棺而出蚂子,到底是詐尸還是另有隱情沃测,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布食茎,位于F島的核電站蒂破,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏别渔。R本人自食惡果不足惜附迷,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哎媚。 院中可真熱鬧喇伯,春花似錦、人聲如沸拨与。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽截珍。三九已至攀甚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岗喉,已是汗流浹背秋度。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钱床,地道東北人荚斯。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像查牌,于是被迫代替她去往敵國和親事期。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容