如何从 apple 提供的源代码编译 objc runtime?

2015-04-01 13:40:11 +08:00
 marginleft

经常看见某些大牛关于objc runtime的文章,感觉很厉害,所以也想玩一下objc runtime。

我们可以从 http://www.opensource.apple.com/tarballs/objc4/ 下载objc4源代码。我用xcode尝试编译了一下,报错,缺少各种头文件,我Google了这些头文件,并把它们放到/tmp/objc.dst/usr/include中,还是报错,比如语法错误等。

实在不知道如何是好,请问各位研究过runtime的大牛:
1. 如何从Apple提供的源代码编译objc runtime?
2. 编译完成以后,应该会得到一个libobjc.A.dylib,如何使用这个dylib(代替系统的libobjc.A.dylib)?

如果你也想研究runtime,是否有兴趣自己编译一下,并且把你的经验分享一下呢?

这个问题我在stackoverflow上也有提问,链接: http://stackoverflow.com/questions/29383436/how-to-compile-and-use-objc-runtime-from-apples-source-code

1018 次点击
所在节点    C
8 条回复
kepenj
2015-04-01 14:08:26 +08:00
kepenj
2015-04-01 14:11:08 +08:00
话说沙盒环境下如果要自己编译一个dylib去替换系统的应该不可能吧的。
marginleft
2015-04-01 14:28:26 +08:00
janxin
2015-04-01 14:49:24 +08:00
模拟器是x64的,和arm的不太一样。runtime的话没必要编译,你可以使用现成的程序反编译和参考相关代码就行了。

或者,你可以使用C函数方式实现部分OC代码的功能,也对你理解runtime有帮助
Esay
2015-04-01 15:14:03 +08:00
这个我折腾过,当时用的 10.8 的 sdk,估计你要自己下一个,比如说这里 https://github.com/phracker/MacOSX-SDKs(这里下载的SDK软链接有点问题,我写过一个脚本修复 https://gist.github.com/Jeswang/75a1fd827dd2ea983875)。

https://github.com/Jeswang/objc4-532.2

替换 OSX 系统的 libobjc.A.dylib 这件事情不要轻易尝试,我试过,后来 Time Machine 恢复的。

如何修改单个文件加载的动态库可以参考 https://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html,但是我代码仓库里的例子是默认加载新生成的 libobjc.A.dylib 的,后来也没仔细看是为什么。

遇到什么坑应该可以帮你看看,Happy hacking!
Esay
2015-04-01 15:18:12 +08:00
怪我空格加得不好,排版乱了 @livid 管理员能不能帮我加两个空格(第一段括号前面和倒数第二段逗号前面,话说这两个符合是不是应该可以起到分隔 URL 得作用?)
marginleft
2015-04-01 15:49:10 +08:00
@Esay 非常感谢!!!!
wushichun
2015-04-01 19:35:28 +08:00
@kepenj 这个也是可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/180839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX