iOS開發(fā)之runtime(13):runtime編譯過程

logo

本系列博客是本人的源碼閱讀筆記碟联,如果有 iOS 開發(fā)者在看 runtime 的脑豹,歡迎大家多多交流抗愁。為了方便討論馁蒂,本人新建了一個(gè)微信群(iOS技術(shù)討論群),想要加入的蜘腌,請?zhí)砑颖救宋⑿牛簔hujinhui207407沫屡,【加我前請備注:ios 】,本人博客http://www.kyson.cn 也在不停的更新中撮珠,歡迎一起討論

本文完整版詳見筆者小專欄:https://xiaozhuanlan.com/runtime

背景

上一篇文章我們講到runtime庫中區(qū)__objc_init_func替代了區(qū)__mod_init_func沮脖。因此我們在runtime編譯好的庫文件中看不到區(qū)__mod_init_func

那么這個(gè)替換的過程是怎么進(jìn)行的呢,本文將為讀者分析芯急。

分析

大家知道勺届,庫的編譯參數(shù)都是在target中進(jìn)行設(shè)置的,如圖:


編譯的文件名

如圖娶耍,如果我們設(shè)置
EXECUTABLE_PREFIXlibbb那么庫文件的前綴就是libbb免姿,
PRODUCT_NAMEobjc.AB那么緊跟著的就是objc.AB了,不難得出伺绽,最終的文件名為:

libbbobjc.AB.dylib

接著我們看其他編譯參數(shù)养泡,主要是如圖所示位置:


編譯語法

復(fù)制下來如下:

set -x
/usr/bin/xcrun -sdk macosx clang++ -Wall -mmacosx-version-min=10.9 -arch x86_64 -std=c++11 "${SRCROOT}/markgc.cpp" -o "${BUILT_PRODUCTS_DIR}/markgc"
"${BUILT_PRODUCTS_DIR}/markgc" "${BUILT_PRODUCTS_DIR}/libobjc.A.dylib"

根據(jù)我們對clang的了解嗜湃,這句命令應(yīng)該不難理解奈应。

set x

略過澜掩,應(yīng)該是設(shè)置環(huán)境變量之類的操作。

/usr/bin/xcrun -sdk macosx clang++ -Wall -mmacosx-version-min=10.9 -arch x86_64 -std=c++11 "${SRCROOT}/markgc.cpp" -o "${BUILT_PRODUCTS_DIR}/markgc"
"${BUILT_PRODUCTS_DIR}/markgc" "${BUILT_PRODUCTS_DIR}/libobjc.A.dylib"

可以看出是調(diào)用的xcrun命令杖挣,關(guān)于xcrun肩榕,其實(shí)大家可以理解為xcodebuild命令的老版本,筆者之前曾經(jīng)寫過一篇相關(guān)的文章:
iOS使用fastlane一鍵打包審核大家可以參考一下惩妇。
這里幾個(gè)參數(shù)大概介紹一下:
-sdk macosx
意思就是運(yùn)行平臺在mac上
-mmacosx-version-min=10.9
是指定mac的最低版本
-arch x86_64
指定平臺是x86_64

"${SRCROOT}/markgc.cpp"

指明編譯的文件

-o "${BUILT_PRODUCTS_DIR}/markgc"
"${BUILT_PRODUCTS_DIR}/markgc" "${BUILT_PRODUCTS_DIR}/libobjc.A.dylib"

指明輸出目錄以及文件名株汉。

因此不難看出,這里腳本的含義就是對編譯后的runtime再進(jìn)行讀取歌殃,并編譯markgc的過程乔妈。而在編譯markgc的時(shí)候再進(jìn)行了對區(qū)__objc_init_func替代區(qū)__mod_init_func的操作。

總結(jié)

本文講解了runtime編譯過程中的參數(shù)設(shè)置氓皱,以及__objc_init_func替代區(qū)__mod_init_func的原理路召,希望對大家有所幫助。

廣告

我的首款個(gè)人開發(fā)的APP壁紙寶貝上線了波材,歡迎大家下載股淡。

壁紙寶貝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市廷区,隨后出現(xiàn)的幾起案子唯灵,更是在濱河造成了極大的恐慌,老刑警劉巖隙轻,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠帕,死亡現(xiàn)場離奇詭異,居然都是意外死亡玖绿,警方通過查閱死者的電腦和手機(jī)搞监,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镰矿,“玉大人琐驴,你說我怎么就攤上這事〕颖辏” “怎么了绝淡?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苍姜。 經(jīng)常有香客問我牢酵,道長,這世上最難降的妖魔是什么衙猪? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任馍乙,我火速辦了婚禮布近,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丝格。我一直安慰自己撑瞧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布显蝌。 她就那樣靜靜地躺著预伺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曼尊。 梳的紋絲不亂的頭發(fā)上酬诀,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音骆撇,去河邊找鬼瞒御。 笑死,一個(gè)胖子當(dāng)著我的面吹牛神郊,可吹牛的內(nèi)容都是我干的肴裙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屿岂,長吁一口氣:“原來是場噩夢啊……” “哼践宴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爷怀,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阻肩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后运授,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烤惊,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年吁朦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柒室。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逗宜,死狀恐怖雄右,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纺讲,我是刑警寧澤擂仍,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站熬甚,受9級特大地震影響逢渔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乡括,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一肃廓、第九天 我趴在偏房一處隱蔽的房頂上張望智厌。 院中可真熱鬧,春花似錦盲赊、人聲如沸铣鹏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吝沫。三九已至呻澜,卻和暖如春递礼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羹幸。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工脊髓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栅受。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓将硝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屏镊。 傳聞我的和親對象是個(gè)殘疾皇子依疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評論 0 9
  • 1 dyld 1.1 dyld簡介 在iOS系統(tǒng)中而芥,幾乎所有的程序都會用到動態(tài)庫律罢,而動態(tài)庫在加載的時(shí)候都需要用d...
    Kevin_Junbaozi閱讀 11,845評論 4 44
  • 今天是最后的一天了!所有的事情都需要今天結(jié)束棍丐,明天是要接受檢查的了误辑! 雖說一直在給員工打氣,說這只是走個(gè)過場歌逢,但自...
    森戈閱讀 110評論 0 0