配置運(yùn)行objc4-750和使用

背景:
由于要看runtime的底層,自己下載了官方的源碼(objc4-750.tar.gz),結(jié)果編譯各種報(bào)錯(cuò)。??????

自己搭建好完整的項(xiàng)目github

下面是本人搭建的過程:
參考鏈接:
1.最新Runtime源碼objc4-750編譯
2.objc - 編譯Runtime源碼objc4-680

  • 準(zhǔn)備工作

  • 下載objc4-750.tar.gz

  • 其他所需要的庫(下載地址點(diǎn)我)

    objc4-33.png

  • 將所有下載的壓縮包全部解壓到一個(gè)文件夾(暫且定為libs,可以直接放在桌面喲)里面(待會(huì)兒用搜索來查找缺失的文件

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

  • 編譯Objc

    • 問題1

      objc4-1.jpg

      • 解決
        objc4-2.jpg
    • 問題2

      objc4-3.png

      • 解決 首先在工程的根目錄下創(chuàng)建include文件夾,再在該文件夾下創(chuàng)建一個(gè)sys文件夾(因?yàn)閳?bào)錯(cuò)的就是#include<sys/reason.h>
        objc4-4.png
      • 在libs文件夾里面搜索reason.h,將其拖入sys文件夾里面
      • 在工程文件里面進(jìn)行配置:($(SRCROOT)/include)
        objc4-5.png
    • 問題3

      objc4-6.png

      • 解決 類似問題2,創(chuàng)建文件夾、搜索文件、拖入文件
        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

      • 解決 出現(xiàn)了重復(fù)定義了 這里我是把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)里的內(nèi)容macosx.internal改為macosx


        objc4-29.png
    • 問題19

      objc4-30.png

      • 解決把Target-objc的Build Settings->Other Text-Based InstallAPI Flags里的內(nèi)容設(shè)為空,把Text-Based InstallAPI Verification Model里的值改為Errors Only


        objc4-31.png
objc4-32.png
  • 總的路徑如下


    objc4-34.png

使用:

objc4-36.png

objc4-37.png

我們?cè)谧约航ǖ墓こ?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實(shí)例對(duì)象的成員變量所占用的大小 >> 8
        NSLog(@"%zd", class_getInstanceSize([NSObject class]));
        
        //獲得obj指針?biāo)赶騼?nèi)存的大小 >> 16
        //malloc_size(const void *ptr):Returns size of given ptr
        NSLog(@"%zd", malloc_size((__bridge const void *)obj));
    }
    return 0;
}

測試:激動(dòng)人心的時(shí)刻

objc4-38.png


友情鏈接:
libmalloc-166.200.60之源碼編譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 dyld 1.1 dyld簡介 在iOS系統(tǒng)中,幾乎所有的程序都會(huì)用到動(dòng)態(tài)庫,而動(dòng)態(tài)庫在加載的時(shí)候都需要用d...
    Kevin_Junbaozi閱讀 12,563評(píng)論 4 44
  • 前言 這個(gè)前言是真的寫在走之前,沒出行,先開始寫下心情,機(jī)票已經(jīng)買了,盡管退票保險(xiǎn)也已經(jīng)買了,感覺自己還是走在了一...
    霖臨曰閱讀 954評(píng)論 0 50
  • 說過很多謊言的人,也過著真實(shí)的生活。 熱戀時(shí)的分不開是真的,分手的走不下去是真的。 少年的躊躇滿志是真的,中年的消...
    很好的阿輕閱讀 475評(píng)論 0 1
  • 周六一大早我們就起來收拾東西,泳衣、水果、夜宵零食.....打扮好我們?nèi)バ^(qū)門口的薄皮餃子吃完飯就出發(fā)了,小蘿莉的...
    東方緋紅閱讀 828評(píng)論 0 0
  • ln: 你好嗎?特別想你。今天早上醒來很早,并無要事。你知道,一定是迫不及待想見你,所以才醒那么早。 這幾日,在魔...
    落魄書生閱讀 588評(píng)論 1 25

友情鏈接更多精彩內(nèi)容