美文网首页
配置运行objc4-750和使用

配置运行objc4-750和使用

作者: dandelionYD | 来源:发表于2018-12-19 17:08 被阅读0次

    背景:
    由于要看runtime的底层,自己下载了官方的源码(objc4-750.tar.gz),结果编译各种报错。😭😭😭

    自己搭建好完整的项目github

    下面是本人搭建的过程:
    参考链接:
    1.最新Runtime源码objc4-750编译
    2.objc - 编译Runtime源码objc4-680

    • 准备工作

    • 下载objc4-750.tar.gz

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

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

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

    • 编译Objc

      • 问题1

        objc4-1.jpg
        • 解决 objc4-2.jpg
      • 问题2

        objc4-3.png
        • 解决 首先在工程的根目录下创建include文件夹,再在该文件夹下创建一个sys文件夹(因为报错的就是#include<sys/reason.h>
          objc4-4.png
        • 在libs文件夹里面搜索reason.h,将其拖入sys文件夹里面
        • 在工程文件里面进行配置:($(SRCROOT)/include) objc4-5.png
      • 问题3

        objc4-6.png
        • 解决 类似问题2,创建文件夹、搜索文件、拖入文件 objc4-7.png
      • 问题4

        objc4-8.png
        (类似问题2)
      • 问题5

        objc4-9.png
        (类似问题2)
      • 问题6

        objc4-10.png
        (类似问题2)
      • 问题7

        objc4-11.png
        删除了bridgeos(3.0)
      • 问题8

        objc4-12.png
        注意是machine/cpu_capabilities.h
        (类似问题2)
      • 问题9

        objc4-13.png
        注意是os/tsd.h(类似问题2)
      • 问题10

        objc4-14.png
        (类似问题2)
      • 问题11

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

        objc4-17.png
        注意是BlocksRuntime/Block_private.h(类似问题2)
      • 问题11

        objc4-18.png
        (类似问题2)
      • 问题12

        objc4-19.png
        • 解决在 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

        objc4-20.png
        • 解决(类似问题2:文件路径见下) objc4-21.png
      • 问题14

        objc4-22.png
        注意是private/_simple.h(类似问题2)
      • 问题15

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


          objc4-35.png
      • 问题16

        objc4-24.png
        • 解决 改一下工程配置: Build Settings->Linking->Order File,改成$(SRCROOT)/libobjc.order
          objc4-25.png
      • 问题17

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


          objc4-27.png
      • 问题18

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


          objc4-29.png
      • 问题19

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


          objc4-31.png
    objc4-32.png
    • 总的路径如下


      objc4-34.png

    使用:

    objc4-36.png objc4-37.png

    我们在自己建的工程 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;
    }
    

    测试:激动人心的时刻

    objc4-38.png

    友情链接:
    libmalloc-166.200.60之源码编译

    相关文章

      网友评论

          本文标题:配置运行objc4-750和使用

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