objc4-818.2配置編譯

環(huán)境

編譯錯(cuò)誤處理

1. unable to find sdk 'macosx.internal' (in target 'xxx')

  • progect -> objc -> Build Settings -> Base SDK -> macOS
  • 修改Run Script (markgc)腳本中的macosx.internalmacosx

2.'sys/reason.h' file not found' file not found

  1. 下載reason.h地址
  2. 在objc4-818.2目錄下創(chuàng)建文件夾HZCommon,并在里面創(chuàng)建文件夾sys骚烧,然后將下載的reason.h拷貝到里面
  3. target -> objc -> Build Settings - > Header Search Paths中 添加$(SRCROOT)/HZCommon

3. 'os/feature_private.h' file not found

  • 注釋掉這個(gè)頭文件, private一般為私有文件
  • 同時(shí) obj-runtime.mm文件中的 os_feature_enabled_simple調(diào)用注釋掉

4. __APPLE_BLEACH_SDK__

Expected function body after function declarator

注釋

#ifndef __APPLE_BLEACH_SDK__
    __BRIDGEOS_DEPRECATED(2.0, 2.0, "not recommended")
#endif

類似判斷代碼

5. 'mach-o/dyld_priv.h' file not found

  1. 下載dyld_priv.h地址
  2. HZCommon中創(chuàng)建文件夾mach-o朗鸠,然后將下載的dyld_priv.h拷貝到里面
  3. dyld_priv.h中的, bridgeos(3.0)全部刪掉

6. 'os/base_private.h'/'os/lock_private.h'/'os/tsd.h' file not found file not found

  1. 下載base_private.h地址
  2. 下載lock_private.h地址
  3. 下載tsd.h地址
  4. HZCommon中創(chuàng)建文件夾os,然后將下載的base_private.h,lock_private.htsd.h拷貝到里面
  5. bridgeos(4.0)刪掉

7. 'pthread/tsd_private.h' file not found

  1. 下載spinlock_private.h地址
  2. 下載tsd_private.h地址
  3. HZCommon中創(chuàng)建文件夾pthread搏予,然后將下載的spinlock_private.htsd_private.h拷貝到里面

8. 'System/machine/cpu_capabilities.h' file not found

  1. 下載cpu_capabilities.h地址
  2. HZCommon中創(chuàng)建文件夾System/machine,然后將下載的cpu_capabilities.h拷貝到里面

9. 'System/pthread_machdep.h' file not found

  1. 下載pthread_machdep.h地址
  2. 將下載的pthread_machdep.h拷貝到HZCommon中的文件夾System里面

10. 'CrashReporterClient.h' file not found

  1. 下載CrashReporterClient.h地址
  2. target -> Build Setting -> Preprocessor Macros中加入LIBC_NO_LIBCRASHREPORTERCLIENT

11. __BRIDGEOS_UNAVAILABLE

注釋

12. 'Typedef redefinition with different types ('int' vs 'volatile OSSpinLock' (aka 'volatile int'))

可以看見(jiàn)有兩處定義了pthread_lock_t激捏,注釋掉pthread_machdep.h文件中的定義即可鸿竖。

// 如 重復(fù)定義 pthread_lock_t
grep -rne "typedef.*pthread_lock_t” .
// 輸出
./pthread/spinlock_private.h:59:typedef volatile OSSpinLock pthread_lock_t __deprecated_msg("Use <os/lock.h> instead”);
./System/pthread_machdep.h:214:typedef int pthread_lock_t;

13. Static declaration of '_pthread_has_direct_tsd' follows non-static declaration

三個(gè)函數(shù)定義重復(fù)了:

  • _pthread_has_direct_tsd(void)
  • _pthread_getspecific_direct(unsigned long slot)
  • _pthread_setspecific_direct(unsigned long slot, void * val)

pthread_machdep.h文件中的定義注釋掉

14. Mismatch in debug-ness macros

注釋

15. 'objc-bp-assist.h' file not found

  1. 注釋
  2. 注釋代碼
 if (!dyld_program_sdk_at_least(dyld_platform_version_macOS_10_13)) {
            DisableInitializeForkSafety = true;
            if (PrintInitializing) {
                _objc_inform("INITIALIZE: disabling +initialize fork "
                             "safety enforcement because the app is "
                             "too old.)");
            }
        }

16. 'objc-shared-cache.h' file not found

  1. 下載objc-shared-cache.h地址
  2. 將下載的objc-shared-cache.h拷貝到HZCommon里面

17. Use of undeclared identifier 'dyld_fall_2020_os_versions'

注釋

18. '_simple.h' file not found

  1. 下載_simple.h地址
  2. 將下載的_simple.h拷貝到HZCommon里面

19. 'Block_private.h' file not found

  1. 下載Block_private.h地址
  2. 將下載的Block_private.h拷貝到HZCommon里面

20. 'Cambria/Traps.h' file not found

  1. 注釋#include <Cambria/Traps.h>#include <Cambria/Cambria.h>
  2. 注釋代碼
//#if TARGET_OS_OSX
//        if (oah_is_current_process_translated()) {
//            kern_return_t ret = objc_thread_get_rip(threads[count], (uint64_t*)&pc);
//            if (ret != KERN_SUCCESS) {
//                pc = PC_SENTINEL;
//            }
//        } else {
//            pc = _get_pc_for_thread (threads[count]);
//        }
//#else
        pc = _get_pc_for_thread (threads[count]);  // 需要保留
//#endif

21. 'os/linker_set.h' file not found

  1. 注釋#include <os/linker_set.h>
  2. 注釋代碼
//    LINKER_SET_FOREACH(_dupi, const objc_duplicate_class **, "__objc_dupclass") {
//        const objc_duplicate_class *dupi = *_dupi;
//
//        if (strcmp(dupi->name, name) == 0) {
//            return;
//        }
//    }

22. 'kern/restartable.h' file not found

  1. 下載restartable.h地址
  2. HZCommon中創(chuàng)建文件夾kern
  3. 將下載的restartable.h拷貝到HZCommon中的kern文件夾

23. 'os/feature_private.h' file not found

  1. 注釋#include <os/feature_private.h>

24. 'os/reason_private.h' file not found'os/variant_private' file not found

  1. 注釋引入
  2. 注釋代碼
//        if (DebugPoolAllocation || sdkIsAtLeast(10_12, 10_0, 10_0, 3_0, 2_0)) {
//            // OBJC_DEBUG_POOL_ALLOCATION or new SDK. Bad pop is fatal.
//            _objc_fatal
//                ("Invalid or prematurely-freed autorelease pool %p.", token);
//        }

25. '_static_assert' declared as an array with a negative size

//STATIC_ASSERT((~ISA_MASK & MACH_VM_MAX_ADDRESS) == 0  ||
//              ISA_MASK + sizeof(void*) == MACH_VM_MAX_ADDRESS);

26. Use of undeclared identifier 'dyld_fall_2018_os_versions'

//    if (!DisableTaggedPointerObfuscation && dyld_program_sdk_at_least(dyld_fall_2018_os_versions)) {
    if (!DisableTaggedPointerObfuscation) {

27. 路徑問(wèn)題ld: can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/AppleInternal/OrderFiles/libobjc.order

target -> Build Setting -> Linking -> Order File -> $(SRCROOT)/libobjc.order

28. library not found for -lCrashReporterClient

target -> Build Setting -> Other Linker Flags -> Any macOS SDK -> -lCrashReporterClient 刪除掉

29 library not found for -loah

target -> Build Setting -> Other Linker Flags -> Any macOS SDK -> -loah 刪除掉

30 library doesn't have symbol '***' ?圆凰?杈帐?

之前修改配置的時(shí)候,改錯(cuò)了東西

建議重走一遍

踩完上面的坑,基本會(huì)Build Success

最后可以新建一個(gè)target關(guān)聯(lián)objc挑童,就可以愉快的探索底層了

不建議直接下載已經(jīng)可以編譯工程直接運(yùn)行累铅,會(huì)減少很多樂(lè)趣與痛苦

參考文章

objc源碼編譯
OC底層探索01:objc-781 源碼調(diào)試和編譯
objc4-818.2編譯踩坑總結(jié)篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市站叼,隨后出現(xiàn)的幾起案子娃兽,更是在濱河造成了極大的恐慌,老刑警劉巖尽楔,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件投储,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阔馋,警方通過(guò)查閱死者的電腦和手機(jī)玛荞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呕寝,“玉大人勋眯,你說(shuō)我怎么就攤上這事”谙眩” “怎么了凡恍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)怔球。 經(jīng)常有香客問(wèn)我嚼酝,道長(zhǎng),這世上最難降的妖魔是什么竟坛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任闽巩,我火速辦了婚禮,結(jié)果婚禮上担汤,老公的妹妹穿的比我還像新娘涎跨。我一直安慰自己,他們只是感情好崭歧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布隅很。 她就那樣靜靜地躺著,像睡著了一般率碾。 火紅的嫁衣襯著肌膚如雪叔营。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天所宰,我揣著相機(jī)與錄音绒尊,去河邊找鬼。 笑死仔粥,一個(gè)胖子當(dāng)著我的面吹牛婴谱,可吹牛的內(nèi)容都是我干的蟹但。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谭羔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼华糖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瘟裸,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缅阳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后景描,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體十办,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年超棺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了向族。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棠绘,死狀恐怖件相,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氧苍,我是刑警寧澤夜矗,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站让虐,受9級(jí)特大地震影響紊撕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赡突,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一对扶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惭缰,春花似錦浪南、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至昂羡,卻和暖如春絮记,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背紧憾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工到千, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昌渤,地道東北人赴穗。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親般眉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子了赵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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