经常看见某些大牛关于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
1
kepenj 2015-04-01 14:08:26 +08:00
|
2
kepenj 2015-04-01 14:11:08 +08:00
话说沙盒环境下如果要自己编译一个dylib去替换系统的应该不可能吧的。
|
3
marginleft OP @kepenj 替换模拟器的呢?不知道是否可行。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libobjc.A.dylib |
4
janxin 2015-04-01 14:49:24 +08:00 1
模拟器是x64的,和arm的不太一样。runtime的话没必要编译,你可以使用现成的程序反编译和参考相关代码就行了。
或者,你可以使用C函数方式实现部分OC代码的功能,也对你理解runtime有帮助 |
5
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! |
6
Esay 2015-04-01 15:18:12 +08:00
怪我空格加得不好,排版乱了 @livid 管理员能不能帮我加两个空格(第一段括号前面和倒数第二段逗号前面,话说这两个符合是不是应该可以起到分隔 URL 得作用?)
|
7
marginleft OP @Esay 非常感谢!!!!
|