objc4-781 源码编译 & 调试
2020-09-07 本文已影响0人
malgee
准备工作:下载objc4相关依赖库
image.png
objc4相关依赖库:Libc,dyld,libauto,libclosure,libdispatch,libpthread,xnu.这些依赖库中包含了Runtime源码库中需要的一些文件.
问题一:unable to find sdk 'macosx.internal
image.png
- 选择
target -> objc -> Build Settings -> Base SDK ->
选择macOS
image.png注意:target中的 objc 和 obc-trampolines都需要更改
问题二:'sys/reason.h' file not found
image.png
缺失的文件可以通过以下三种方式获取:
- 通过 GitHub 源码 下载,路径在
objc-756.2编译资料/xnu-4903.241.1/bsd/sys/reason.h
- 或者大家可以通过 Apple source 在
xnu-4903.241.1/bsd/sys/reason.h
路径自行下载 - 还可以通过谷歌中输入
reason.h site:opensource.apple.com
定向检索
step 1. 在根目录创建了一个 MGCommon
文件, 创建 sys
文件, 把 reason.h
文件加入进去,如下图
image.png
step 2. 然后设置文件检索路径:选择 target -> objc -> Build Settings
,在工程的 Header Search Paths
中添加搜索路径 $(SRCROOT)/MGCommon
image.png
其他的文件找不到,处理和上面👆处理一样
'mach-o/dyld_priv.h' file not found
'os/lock_private.h' file not found
'os/base_private.h' file not found
'pthread/tsd_private.h' file not found
'System/machine/cpu_capabilities.h' file not found
'os/tsd.h' file not found
'pthread/spinlock_private.h' file not found
'System/pthread_machdep.h' file not found
'CrashReporterClient.h' file not found
'objc-shared-cache.h' file not found
'_simple.h' file not found
'Block_private.h' file not found
'mach-o/dyld_priv.h' file not found
- 在
MGCommon
文件夹下创建math-o
文件夹, - 找到文件:
dyld-732.8 -> include -> mach-o -> dyld_priv.h
, 将dyld_priv.h
拷贝到MGCommon /mach-o/
文件夹下,如下图
image.png
- 然后在
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
'os/lock_private.h' file not found
'os/base_private.h' file not found
- 在
MGCommon
下创建os
文件夹 - 找到
libplatform-220
-->private
-->os
-->lock_private.h 、base_private.h
,并将ock_private.h 、base_private.h
文件拷贝至MGCommon/os
文件下
'pthread/tsd_private.h' file not found
'pthread/spinlock_private.h' file not found
- 在
MGCommon
下创建pthread
文件 - 找到路径
libpthread-416.11.1
->private
->tsd_private.h、spinlock_private.h
,并tsd_private.h、spinlock_private.h
拷贝到MGCommon /pthread
文件下
'System/machine/cpu_capabilities.h' file not found
- 在
MGCommon
下创建System
文件夹 - 然后在
System
文件夹下创建machine
文件夹 - 找到路径:
xnu6153.11.26
->osfmk
->machine
->cpu_capabilities.h
, 并将cpu_capabilities.h
拷贝到MGCommon/System/machine
文件夹下
image.png
os/tsd.h' file not found
- 找到路径:
xnu6153.11.26
->libsyscall
->os
->tsd.h
, 并将tsd.h
拷贝到MGCommon/os
文件下
image.png
'System/pthread_machdep.h' file not found
- 在这里下载
pthread_machdep.h
文件,然后将pthread_machdep.h
拷贝到:MGCommon/System
文件夹下。
注:在最新版的macOS 10.15中最新版下载的libc
中没有这个h文件,需要下载Libc-583
版本
'CrashReporterClient.h' file not found
- 这个文件在 Libc-825.24找到,路径为
Libc-825.24/include/CrashReporterClient.h
- 将
CrashReporterClient.h
拷贝到MGCommon
文件夹下 - 需要在
Build Settings
->Preprocessor Macros
中加入:LIBC_NO_LIBCRASHREPORTERCLIENT
'objc-shared-cache.h' file not found
- 找到路径:
dyld-733.6
->include
->objc-shared-cache.h
, 将objc-shared-cache.h
拷贝到MGCommon
文件夹下
'_simple.h' file not found
- 找到路径:
libplatform-220
->private
->_simple.h
, 将_simple.h
拷贝到MGCommon
文件夹下