V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
marginleft
V2EX  ›  C

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

  •  
  •   marginleft · 2015-04-01 13:40:11 +08:00 · 1145 次点击
    这是一个创建于 3524 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经常看见某些大牛关于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 条附言  ·  2015-04-02 09:10:36 +08:00
    知乎上:http://www.zhihu.com/question/29215296
    有大神@不二乎 将要直播答案。请大家关注。
    8 条回复    2015-04-01 19:35:28 +08:00
    kepenj
        1
    kepenj  
       2015-04-01 14:08:26 +08:00
    kepenj
        2
    kepenj  
       2015-04-01 14:11:08 +08:00
    话说沙盒环境下如果要自己编译一个dylib去替换系统的应该不可能吧的。
    marginleft
        3
    marginleft  
    OP
       2015-04-01 14:28:26 +08:00
    janxin
        4
    janxin  
       2015-04-01 14:49:24 +08:00   ❤️ 1
    模拟器是x64的,和arm的不太一样。runtime的话没必要编译,你可以使用现成的程序反编译和参考相关代码就行了。

    或者,你可以使用C函数方式实现部分OC代码的功能,也对你理解runtime有帮助
    Esay
        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!
    Esay
        6
    Esay  
       2015-04-01 15:18:12 +08:00
    怪我空格加得不好,排版乱了 @livid 管理员能不能帮我加两个空格(第一段括号前面和倒数第二段逗号前面,话说这两个符合是不是应该可以起到分隔 URL 得作用?)
    marginleft
        7
    marginleft  
    OP
       2015-04-01 15:49:10 +08:00
    @Esay 非常感谢!!!!
    wushichun
        8
    wushichun  
       2015-04-01 19:35:28 +08:00
    @kepenj 这个也是可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1569 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:11 · PVG 01:11 · LAX 09:11 · JFK 12:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.