runtime源码环境配置

作者: 来自蒙塔基的钢蛋儿 | 来源:发表于2019-03-15 16:49 被阅读5次

    最近在看runtime底层源码,官方的下载各种报错,找到了报错的处理方式,并附带Demo地址


    转载地址:https://www.jianshu.com/p/bbafd02ad0bb 感谢作者

    1.最新Runtime源码objc4-750编译
    2.objc - 编译Runtime源码objc4-680

    • 准备工作

    • 下载objc4-750.tar.gz

    • 其他所需要的库(下载地址点我)

      image
    • 将所有下载的压缩包全部解压到一个文件夹(暂且定为libs,可以直接放在桌面哟)里面(待会儿用搜索来查找缺失的文件

    • Xcode打开<i>objc.xcodeproj</i>工程文件

    • 编译Objc

      • 问题1

        image
        • 解决

          image
      • 问题2

        image
        • 解决 首先在工程的根目录下创建include文件夹,再在该文件夹下创建一个sys文件夹(因为报错的就是#include<sys/reason.h>

          image
        • 在libs文件夹里面搜索reason.h,将其拖入sys文件夹里面

        • 在工程文件里面进行配置:($(SRCROOT)/include)

          image
      • 问题3

        image
        • 解决 类似问题2,创建文件夹、搜索文件、拖入文件

          image
      • 问题4

        image

        (类似问题2)

      • 问题5

        image

        (类似问题2)

      • 问题6

        image

        (类似问题2)

      • 问题7

        image

        删除了bridgeos(3.0)

      • 问题8

        image

        注意是machine/cpu_capabilities.h
        (类似问题2)

      • 问题9

        image

        注意是os/tsd.h(类似问题2)

      • 问题10

        image

        (类似问题2)

      • 问题11

        image image
        • 解决 出现了重复定义了 这里我是把pthread_machdep.h文件里面的给注释掉的(详见demo)
      • 问题10

        image

        注意是BlocksRuntime/Block_private.h(类似问题2)

      • 问题11

        image

        (类似问题2)

      • 问题12

        image
        • 解决在 dyld_priv.h 文件中:添加
        #define DYLD_MACOSX_VERSION_10_11 0x000A0B00
        #define DYLD_MACOSX_VERSION_10_12 0x000A0C00
        #define DYLD_MACOSX_VERSION_10_13 0x000A0D00
        #define DYLD_MACOSX_VERSION_10_14 0x000A0E00
        
        
      • 问题13

        image
        • 解决(类似问题2:文件路径见下)

          image
      • 问题14

        image

        注意是private/_simple.h(类似问题2)

      • 问题15

        image
        • 解决:改一下工程配置文件:
          Build Settings->Preprocessor Macros(Debug & Release)加入:LIBC_NO_LIBCRASHREPORTERCLIENT

          image
      • 问题16

        image
        • 解决 改一下工程配置: Build Settings->Linking->Order File,改成$(SRCROOT)/libobjc.order

          image
      • 问题17

        image
        • 解决:在 Build Settings -> Linking -> Other Linker Flags里删掉"-lCrashReporterClient"(Debug和Release都删了)

          image
      • 问题18

        image
        • 解决把Target-objc的Build Phases->Run Script(markgc)里的内容macosx.internal改为macosx

          image
      • 问题19

        image
        • 解决把Target-objc的Build Settings->Other Text-Based InstallAPI Flags里的内容设为空,把Text-Based InstallAPI Verification Model里的值改为Errors Only

          image
    image
    • 总的路径如下

      image

    使用:

    image image

    我们在自己建的工程 main.m 文件里

    #import <Foundation/Foundation.h>
    #import <objc/runtime.h>
    #import <malloc/malloc.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            NSObject *obj = [[NSObject alloc] init];
    
            //获得NSObject实例对象的成员变量所占用的大小 >> 8
            NSLog(@"%zd", class_getInstanceSize([NSObject class]));
    
            //获得obj指针所指向内存的大小 >> 16
            //malloc_size(const void *ptr):Returns size of given ptr
            NSLog(@"%zd", malloc_size((__bridge const void *)obj));
        }
        return 0;
    }
    
    

    Demo下载地址

    相关文章

      网友评论

        本文标题:runtime源码环境配置

        本文链接:https://www.haomeiwen.com/subject/obdrmqtx.html