編譯過程與靜態(tài)庫&動態(tài)庫

一、編譯過程

編譯過程.jpg

1、預(yù)編譯(Preprocessing)

???????預(yù)編譯即預(yù)處理,編譯器不能直接對預(yù)編譯命令進(jìn)行編譯,必須在對程序進(jìn)行編譯之前,先對程序中這些特殊的命令進(jìn)行處理。預(yù)編譯主要處理以“#”開始的編譯命令,如宏定義,條件編譯,文件包含,去注釋等。

 $ clang -E main.m  

2、編譯(Compilation)

???????將預(yù)編譯處理完后的代碼編譯成匯編代碼。此階段還進(jìn)行了詞法、語法分析、生成LLVM IR中間代碼、bitcode優(yōu)化,最后生成匯編代碼

$ clang -S -fobjc-arc main.m -o main.s

3、匯編(Assemble)

???????把.s的匯編文件轉(zhuǎn)成可執(zhí)行的二進(jìn)制文件。

4、鏈接(Linking)

???????將匯編生成的目標(biāo)文件與所有的引用的庫一起鏈接打包到可執(zhí)?文件當(dāng)中。此階段只鏈接靜態(tài)庫,如 .a .lib 等

二、靜態(tài)庫

???????靜態(tài)庫是經(jīng)過編譯的二進(jìn)制文件。在鏈接階段,引用庫一旦鏈接成功,將匯編生成的目標(biāo)文件與引用的庫一起鏈接打包到可執(zhí)?文件當(dāng)中。

優(yōu)點

1、代碼裝載速度快,執(zhí)行速度略比動態(tài)鏈接庫快;
2、編譯進(jìn)二進(jìn)制文件當(dāng)中,相對安全。

缺點

1、代碼冗余度高;
2、APP容量增大。

三、動態(tài)庫

???????程序編譯階段并不會鏈接到目標(biāo)二進(jìn)制文件當(dāng)中,?是在程序運行時才被載?。

優(yōu)點

1、減少打包之后的APP的容量;
2、共享內(nèi)存,節(jié)約資源;
3、通過更新動態(tài)庫,實現(xiàn)熱更新;
4、冗余少,低耦合。

缺點

1、不穩(wěn)定,不安全

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容