一 OC底层 源码编译调试

最新 macOS 10.15.6 下 objc4-787.1 源码编译调试

当前环境 macOS 10.15.7 xcode 11.5
objc4-787.1 下载地址

下载相关文件

需要下载相关文件:
objc4-787.1
Libc-1353.100.2
dyld-750.6
libauto-187
libdispatch-1173.100.2libpthread-416.100.3
libclosure-74
xnu-6153.141.1
libplatform-220.100.1

  • 解压 objc4-787.1 运行 xcodeproj 文件,选择 targetobjc 运行
    以下开始解决错误
  1. 两个 unable to find sdk 'macosx.internal' 错误
    解决方案:
    • 选择 targets -> objc-> build settings -> Base SDK 选择 macOS
    • 选择 targets -> objc-trampolines -> build settings -> Base SDK 选择 macOS

2 sys/reason.h' file not found, 文件找不到
解决方案:

  • 这是我们在项目根目录下创建 Common 文件夹,Common 文件夹就是我们放依赖文件的地方
  • 该文件在我们之前下载的 xnu-6153.141.1 库中, 目录 xnu-6153.141.1/bsd/sys/reason.h, 将文件放入 Common/sys 目录下
  • 现在还不行 需要给 Common 文件夹 添加文件索引 targets -> objc -> Build Settings -> Header Search Paths 添加引用 如下: $(SRCROOT)/Common/

接下来 还有很多的文件丢失 ,我们同上处理

  1、 'sys/reason.h' file not found     -->  xnu-6153.141.1/bsd/sys/reason.h
  2、 'mach-o/dyld_priv.h' file not found  -->  dyld-750.6/include/mach-o/dyld-priv.h
  3、'os/lock_private.h' file not found  -->  libplatform-220.100.1/private/os/lock_private.h
  4、'os/base_private.h' file not found  -->   libplatform-220.100.1/private/os/base_private.h
  5、'pthread/tsd_private.h' file not found   -->    libpthread-416.100.3/private/tsd_private.h
  6、'System/machine/cpu_capabilities.h' file not found    --->    xnu-6153.141.1/osfmk/machine/cpu_capabilities.h
  7、'os/tsd.h' file not found    --->  xnu-6153.141.1/libsyscall/os/tsd.h
  8、 'pthread/spinlock_private.h' file not found   --->   libpthread-416.100.3/private/spinlock_private.h
  9、 'objc-shared-cache.h' file not found  --->   dyld-750.6/include/objc-shared-cache.h
  10、'_simple.h' file not found    --->     libplatform-220.100.1/private/_simple.h
  11、'Block_private.h' file not found --->  libclosure-74/Block_private.h
'  12、'kern/restartable.h' file not found    ---->   xnu-6153.141.1/osfmk/kern/restartable.h

个别难找的文件丢失

1、'System/pthread_machdep.h' file not found ---> 该文件不在我们下载的库中,处于之前libc版本中 下载地址:https://opensource.apple.com/source/Libc/Libc-825.24/pthreads/pthread_machdep.h
2、'CrashReporterClient.h' file not found ---> 同上https://opensource.apple.com/source/Libc/Libc-825.26/include/CrashReporterClient.h

文件目录最终如下


还有问题

错误一
  • 出现8个 Expected ','错误, dyld_priv.h7个 、lock_private .h 1 个

    解决 :
    • dyld_priv.h 将报错行 注释就行了
    • lock_private.h 删除 bridgeos(4.0)
错误二 :

pthread_machdep.h编译错误

  • pthread_machdep.h是我们后续加入的,里面有一些定义和原Runtime源码定义重复了,需要将pthread_machdep.h中的重复定义注释。
  • 分别将pthread_machdep.h文件中的_pthread_has_direct_tsd_pthread_setspecific_direct_pthread_getspecific_direct注释即可。
错误三 :

Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_11'Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_14'
处理方法:我们在Common/mach-o/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
错误四 :

Use of undeclared identifier 'CRGetCrashLogMessage'
解决方法:targets -> objc -> Build Settings -> Preprocessor Macros Not Used In添加 LIBC_NO_LIBCRASHREPORTERCLIENT

错误五 :

ld: can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决方法: Build Settings->Linking->Order File -> Debug 改成$(SRCROOT)/libobjc.order

错误六 :

ld: library not found for -lCrashReporterClient clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决方法:
虽然我们添加了 CrashReporterClient 但还是在报错,所以直接删除引用。
TARGETS -> objc -> Build Settings -> Linking -> Other Linker Flags里删掉 Debug -> Any macOS SDKRelease -> Any macOS SDK 中的"-lCrashReporterClient"

删除之后如下


错误七 :

/xcodebuild:1:1: SDK "macosx.internal" cannot be located.
/xcrun:1:1: sh -c '/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -sdk macosx.internal -find clang++ 2> /dev/null' failed with exit code 16384: (null) (errno=No such file or directory)
/xcrun:1:1: unable to find utility "clang++", not a developer tool or in PATH

解决方法:将 Targets -> objc ->Build Phases->Run-Script(markgc)里的内容macosx.internal改为macosx

------ 终于编译通过

现在 我们搭建一个 target, 就命名 objc_run


绑定二进制依赖关系

现在可以开始在 objc_run/main.m中 愉快的玩耍了

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

推荐阅读更多精彩内容