objc4-818.2配置编译

环境

编译错误处理

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目录下创建文件夹HZCommon,并在里面创建文件夹sys,然后将下载的reason.h拷贝到里面
  3. target -> objc -> Build Settings - > Header Search Paths中 添加$(SRCROOT)/HZCommon

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

  • 注释掉这个头文件, private一般为私有文件
  • 同时 obj-runtime.mm文件中的 os_feature_enabled_simple调用注释掉

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中创建文件夹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中创建文件夹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中创建文件夹pthread,然后将下载的spinlock_private.htsd_private.h拷贝到里面

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

  1. 下载cpu_capabilities.h地址
  2. HZCommon中创建文件夹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'))

可以看见有两处定义了pthread_lock_t,注释掉pthread_machdep.h文件中的定义即可。

// 如 重复定义 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

三个函数定义重复了:

  • _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中创建文件夹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. 路径问题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 '***' ???

之前修改配置的时候,改错了东西

建议重走一遍

踩完上面的坑,基本会Build Success

最后可以新建一个target关联objc,就可以愉快的探索底层了

不建议直接下载已经可以编译工程直接运行,会减少很多乐趣与痛苦

参考文章

objc源码编译
OC底层探索01:objc-781 源码调试和编译
objc4-818.2编译踩坑总结篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容