iOS底層系列01-- objc4-781源碼的編譯與調試

  • 本文主要是通過將objc4-781的源碼編譯成功敛瓷,然后在源碼中新建一個YYTest的Target雹顺,然后將其與objc4-781工程源碼進行綁定野来,最后運行YYTest進行底層源碼的調試截汪;

工具環(huán)境

objc4-781源碼運行所需要的依賴文件

編譯objc4-781源碼工程所遇到的問題及解決方案

問題一: unable to find sdk 'macosx.internal

Snip20210201_4.png
  • 解決方案:選擇target -> objc -> Build Settings -> Base SDK -> 選擇 macOS【target中的 objc 和 obc-trampolines都需要更改】
Snip20210201_3.png

問題二: 'sys/reason.h' file not found

Snip20210201_6.png
  • 解決方案: 在objc4-781的根目錄下新建YYCommon文件夾, 同時在YYCommon文件中創(chuàng)建sys文件夾;
Snip20210202_31.png
  • 將依賴文件xnu-6153.11.26下的reason.h(路徑為:xnu-6153.11.26/bsd/sys/reason.h)拷貝到新建YYCommon/sys文件夾中疾牲;

  • 設置文件檢索路徑:選擇 target -> objc -> Build Settings,在工程的 Header Serach Paths 中添加搜索路徑 $(SRCROOT)/YYCommon

    Snip20210202_32.png

問題三: mach-o/dyld_priv.h' file not found

Snip20210201_9.png
  • 解決方案:在objc4-781的根目錄下的YYCommon文件夾下新建mach-o文件夾衙解;
  • 將依賴文件dyld-733.6下的dyld_priv.h(路徑為:dyld-733.6/include/mach-o/dyld_priv.h)拷貝到新建YYCommon/mach-o文件夾中阳柔;
  • 拷貝到文件后,還需要修改 dyld_priv.h 文件蚓峦,即在 dyld_priv.h文件頂部加入一下宏:
#define DYLD_MACOSX_VERSION_10_11 0x000A0B00
#define DYLD_MACOSX_VERSION_10_12 0x000A0C00
#define DYLD_MACOSX_VERSION_10_13 0x000A0D00
#define DYLD_MACOSX_VERSION_10_14 0x000A0E00
  • 修改后的dyld_priv.h文件舌剂;
Snip20210202_33.png
  • 若dyld_priv.h文件出現(xiàn)bridgeos(3.0)報錯,則將參數(shù)bridgeos(3.0)去除暑椰,去除之后如下所示霍转;
Snip20210202_34.png

問題四: os/lock_private.h' file not found

Snip20210201_10.png
  • 解決方案:在objc4-781的根目錄下的YYCommon文件夾下新建os文件夾;
  • 將依賴文件libplatform-220下的lock_private.h和base_private.h(路徑為:libplatform-220/private/os/lock_private.h,base_private.h)拷貝到新建YYCommon/os文件夾中一汽;

問題五: 'pthread/tsd_private.h' file not found

Snip20210201_11.png
  • 解決方案:在objc4-781的根目錄下的YYCommon文件夾下新建pthread文件夾谴忧;
  • 將依賴文件libpthread-416.11.1下的tsd_private.hspinlock_private.h(路徑為:libpthread-416.11.1/private/tsd_private.h,spinlock_private.h)拷貝到新建YYCommon/pthread文件夾中;

問題六: System/machine/cpu_capabilities.h' file not found

Snip20210201_12.png
  • 解決方案: 在objc4-781的根目錄下的YYCommon文件夾下新建System/machine文件夾;
  • 將依賴文件xnu6153.11.26下的cpu_capabilities.h(路徑為:xnu6153.11.26/osfmk/machine/cpu_capabilities.h)拷貝到新建YYCommon/System/machine文件夾中角虫;

問題七: 'os/tsd.h' file not found

Snip20210201_13.png
  • 解決方案:將依賴文件xnu6153.11.26下的tsd.h(路徑為:xnu6153.11.26/libsyscall/os/tsd.h)拷貝到新建YYCommon/os文件夾中沾谓;

問題八: 'System/pthread_machdep.h' file not found

Snip20210201_14.png
  • 解決方案: 將依賴文件Libc-583下的pthread_machdep.h(路徑為:Libc-583/pthreads/pthread_machdep.h)拷貝到新建YYCommon/System文件夾中;

問題九: 'CrashReporterClient.h' file not found

Snip20210202_15.png
  • 解決方案:將依賴文件Libc-825.24下的CrashReporterClient.h(路徑為:Libc-825.24/include/CrashReporterClient.h)拷貝到新建YYCommon文件夾中戳鹅;
  • 工程配置在 Build Settings -> Preprocessor Macros中加入:
    LIBC_NO_LIBCRASHREPORTERCLIENT
    Snip20210202_35.png
  • 如果還是報錯CrashReporterClient 的問題均驶,解決方法: 在BuildSetting --> Other Linker Flags中去掉CrashReporterClient

問題十: 'objc-shared-cache.h' file not found

Snip20210202_16.png
  • 解決方案:將依賴文件dyld-733.6下的objc-shared-cache.h(路徑為:dyld-733.6/include/objc-shared-cache.h)拷貝到新建YYCommon文件夾中枫虏;

問題十一: 'kern/restartable.h' file not found

Snip20210202_17.png
  • 解決方案:在objc4-781的根目錄下的YYCommon文件夾下新建kern文件夾妇穴;
  • 將依賴文件xnu6153.11.26下的restartable.h(路徑為:xnu6153.11.26/osfmk/kern/restartable.h)拷貝到新建YYCommon/kern文件夾中;

問題十二: Mismatch in debug-ness macros

Snip20210202_18.png
  • 解決方案:注釋掉objc-runtime.mm中的#error mismatch in debug-ness macros隶债;

問題十三: '_simple.h' file not found

Snip20210202_19.png
  • 解決方案:將依賴文件libplatform-220下的_simple.h(路徑為:libplatform-220/include/_simple.h)拷貝到新建YYCommon文件夾中腾它;

問題十四: ''Block_private.h' file not found

Snip20210202_20.png
  • 解決方案:將依賴文件libclosure-74下的Block_private.h(路徑為:libclosure-74/Block_private.h)拷貝到新建YYCommon文件夾中;

問題十五: 'can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order

Snip20210202_21.png
  • 解決方案:在工程中配置: target -> objc -> Build Settings -> Order File中添加路徑$(SRCROOT)/libobjc.order
    Snip20210202_36.png

問題十六: library not found for -lCrashReporterClient

Snip20210202_22.png
  • 解決方案:在工程中配置: target -> objc -> Build Settings -> Other Linker Flags Debug與Release模式下的Any macOS SDK 找到lCrashReporterClient刪除掉死讹;
Snip20210202_37.png

問題十七: /xcodebuild:1:1: SDK "macosx.internal" cannot be located

解決方案:

  • 在工程中配置: targets -> Build Phases -> Run Script中的macosx.internal改成macosx
Snip20210202_38.png
  • 上面的所有問題解決完,objc4-781源碼工程就能編譯成功了,完整的工程文件如下:
Snip20210202_41.png

在objc4-781源碼工程中新建Target 命名為YYTest,然后配置最后可以進行源碼調試了瞒滴;

  • 新建Target 命名為YYTest;
Snip20210202_23.png
Snip20210202_24.png
Snip20210202_25.png
  • YYTest的工程配置

  • 1.給YYTest綁定依賴關系,YYTest -> Build Phases -> Dependencies 添加objc

  • 2.給YYTest添加庫,YYTest -> Build Phases -> Link Binary With Libraries添加libobjc.A.dylib

    Snip20210202_27.png

  • YYTest中的斷點調試設置

    1. 打斷點調試發(fā)現(xiàn)斷點無效;


      Snip20210202_39.png
  • 解決方案:YYTest -> Build Phases -> Compile Sources中 將main.m拖到最上面;

Snip20210202_28.png

2.源碼中的斷點無效;

Snip20210202_40.png
  • 解決方案:Build Setting --> 將Enable Hardened Runtime 置為NO
Snip20210202_30.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末妓忍,一起剝皮案震驚了整個濱河市虏两,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌世剖,老刑警劉巖定罢,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旁瘫,居然都是意外死亡祖凫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門酬凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惠况,“玉大人,你說我怎么就攤上這事粱年∈勐耍” “怎么了罚拟?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵台诗,是天一觀的道長。 經常有香客問我赐俗,道長拉队,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任阻逮,我火速辦了婚禮粱快,結果婚禮上,老公的妹妹穿的比我還像新娘叔扼。我一直安慰自己事哭,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布瓜富。 她就那樣靜靜地躺著鳍咱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪与柑。 梳的紋絲不亂的頭發(fā)上谤辜,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音价捧,去河邊找鬼丑念。 笑死,一個胖子當著我的面吹牛结蟋,可吹牛的內容都是我干的脯倚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嵌屎,長吁一口氣:“原來是場噩夢啊……” “哼挠将!你這毒婦竟也來了胳岂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤舔稀,失蹤者是張志新(化名)和其女友劉穎乳丰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體内贮,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡产园,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夜郁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片什燕。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖竞端,靈堂內的尸體忽然破棺而出屎即,到底是詐尸還是另有隱情,我是刑警寧澤事富,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布技俐,位于F島的核電站,受9級特大地震影響统台,放射性物質發(fā)生泄漏雕擂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一贱勃、第九天 我趴在偏房一處隱蔽的房頂上張望井赌。 院中可真熱鬧,春花似錦贵扰、人聲如沸仇穗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纹坐。三九已至,卻和暖如春列肢,著一層夾襖步出監(jiān)牢的瞬間恰画,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工瓷马, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拴还,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓欧聘,卻偏偏與公主長得像片林,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容