本文环境:Xcode 8.x。
其实编译Runtime源码objc4-706,跟objc - 编译Runtime源码objc4-680是大同小异的。这里也简单写一下吧,如果大家编译过objc4-680,相信下面的步骤是很熟悉的。想直接跳过这些步骤直接拿到可编译版本的同学,可以到我的Github objc4-706下载,然后自己加个Target来调戏(直接看最后调试的那节)。
1.下载源码
进入苹果开源网站,进入macOS 10.12,⌘+F分别搜索和下载下面的项目:
objc4,Libc,dyld,libauto,libclosure,libdispatch,libpthread,xnu
然后,再去开源项目Tarballs目录⌘+F搜索下载launchd项目,下载个最新的版本吧。
2.解压
于是我们得到了8个
- objc4-706.tar.gz (Runtime源码objc4工程)
Libc-1158.1.2.tar.gz(太新了,有些头文件找不到,替换个旧点的吧 Libc-825.40.1.tar.gz)- dyld-421.1.tar.gz
- libauto-187.tar.gz
- libclosure-67.tar.gz
- libdispatch-703.1.4.tar.gz
- libpthread-218.1.3.tar.gz
- xnu-3789.1.32.tar.gz
- launchd-842.92.1.tar.gz
然后,新建一个objc4/文件夹,再在里面建一个AppleSources/文件夹,把objc4-706.tar.gz放到objc4/下,其余的都放到objc4/AppleSources/目录下,这样做是为了方便搜索objc4-706项目里缺少的头文件,好了,解压这里所有的.tar吧,我们开始吧。
3.编译
1.
在刚刚解压出来的objc4-706/工程目录下建立一个文件夹include:
mkdir objc4/objc4-706/include
选择工程配置文件objc->TARGETS->objc->Build Settings->Search Paths->Header Search Paths,加入:
$(SRCROOT)/include
2.
# include <sys/reason.h> 处 'sys/reason.h' file not found,找不到'sys/reason.h'文件。解决方法就是我们去AppleSources/目录搜索到这个文件,然后放到刚刚新建的include/目录下就好了:
cd objc4/AppleSources/
find . -name "reason.h"
看输出结果:
./xnu-3789.1.32/bsd/sys/reason.h
找到了!OK,因为它说的是'sys/reason.h'文件找不到,所以我们需要在include/下建立个sys/目录,然后把reason.h放到include/sys/目录下:(发觉我挺啰嗦的,生怕遗露了哪点没说,希望你们细心点)
mkdir ../objc4-706/include/sys/
find . -name "reason.h" | xargs -I{} cp {} ../objc4-706/include/sys/
上面命令其实就是在objc4-706/include/下建立个sys/目录,然后把reason.h复制到里面去。你们在Finder用鼠标拖过去也一样的,我习惯了命令行。
好了,回到Xcode,⌘+B(Build)编译一下,下一个错误。下面也是,每个步骤后⌘+B一下。
3.
# include <mach-o/dyld_priv.h>,解决方法跟上面一样,我们就一步到位吧:
find . -name "dyld_priv.h" ##确认有唯一结果打印输出后,继续执行下面两条命令吧
mkdir ../objc4-706/include/mach-o/
find . -name "dyld_priv.h" | xargs -I{} cp {} ../objc4-706/include/mach-o/
继续⌘+B(Build)编译,看下一个错误。

最低0.47元/天 解锁文章
642

被折叠的 条评论
为什么被折叠?



