objc - 编译Runtime源码objc4-706

本文环境:Xcode 8.x

其实编译Runtime源码objc4-706,跟objc - 编译Runtime源码objc4-680是大同小异的。这里也简单写一下吧,如果大家编译过objc4-680,相信下面的步骤是很熟悉的。想直接跳过这些步骤直接拿到可编译版本的同学,可以到我的Github objc4-706下载,然后自己加个Target来调戏(直接看最后调试的那节)。

1.下载源码

进入苹果开源网站,进入macOS 10.12⌘+F分别搜索和下载下面的项目:
objc4Libcdyldlibautolibclosurelibdispatchlibpthreadxnu
然后,再去开源项目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)编译,看下一个错误。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值