編譯objc4-750.1

目前objc4最新的源碼是750.1版本芽唇,看網(wǎng)上也沒人寫了這個版本的編譯方法脱柱,所以這里記錄一下。編譯方法都大同小異酸舍,只是有些部分新版做了改動帅韧。
先去下載源碼,地址 https://opensource.apple.com/tarballs/objc4/objc4-750.1.tar.gz
但是為了編譯這個源碼啃勉,我們還得下載其他的源碼忽舟,因?yàn)閛bjc4這個少了很多頭文件。

  • dyld-551.3.tar.gz (新版的__API_AVAILABLE這個宏會報錯)
  • xnu-4903.221.2.tar.gz
  • libdispatch-1008.220.2.tar.gz
  • libplatform-177.200.16.tar.gz
  • libpthread-330.220.2.tar.gz

下好了之后淮阐,把上面這些依賴庫都解壓好后叮阅,扔進(jìn)同一個文件夾,方便查找頭文件泣特。

然后打開解壓后的objc工程浩姥。先build一下,就會報錯状您,說32位架構(gòu)已經(jīng)過期勒叠,請移除,這里我們要修改兩個target的配置膏孟,如下圖眯分,在工程的uild Settings里面,你可以在Architectures里面選擇使用64位柒桑,或者在下面的Valid Architectures里面將i386移除弊决。注意有兩個target(objc 和 objc-trampolines)都需要這么做。然后再編譯就會報其他錯誤了魁淳。


image.png

先是頭文件 #include <sys/reason.h>找不到飘诗。這個時候就需要去我們下載的依賴庫里面去找頭文件了与倡。
首先在objc的工程目錄里面新建一個Common文件夾,用來存放我們拷貝的頭文件昆稿。然后到工程的uild Settings-->Header Search Path里面添加上我們剛剛創(chuàng)建的文件夾$(SRCROOT)/Common

image.png

然后在我們解壓的依賴庫的文件夾里面搜索reason.h纺座,會找到一個文件,然后按照 #include <sys/reason.h>引用路徑貌嫡,在Common文件夾里面新建一個sys文件夾比驻,然后把reason.h文件拷貝到sys里面该溯。然后編譯岛抄,這樣就會報另外的錯誤了。
依舊是頭文件找不到的問題狈茉,然后按照剛剛的做法依次找到下面的頭文件夫椭,并且拷貝過去,注意引用時候的路徑是對應(yīng)不同的目錄的氯庆,需要按照要求新建文件夾

  • 提示mach-o/dyld_priv.h file not found 選擇./dyld-551.3/include/mach-o/dyld_priv.h
  • 提示os/lock_private.h file not found選擇./libplatform-177.200.16/private/os/lock_private.h
  • 提示os/base_private.h file not found選擇./libplatform-177.200.16/private/os/base_private.h
  • 提示pthread/tsd_private.h file not found選擇./libpthread-330.220.2/private/tsd_private.h
  • 提示System/machine/cpu_capabilities.h file not found選擇./xnu-4903.221.2/osfmk/machine/cpu_capabilities.h
  • 提示os/tsd.h file not found選擇./xnu-4903.221.2/libsyscall/os/tsd.h
  • 提示pthread/spinlock_private.h file not found選擇./libpthread-330.220.2/private/spinlock_private.h
  • 提示System/pthread_machdep.h file not found 這個特殊處理一下蹭秋,直接把該處的頭文件引用注釋掉。
  • 提示CrashReporterClient.h file not found 這個也要特殊處理堤撵。因?yàn)樾掳娴腖IBC庫已經(jīng)把這個頭文件移除掉了仁讨。我們先把引用的到這個頭文件地方注釋掉。然后在objc-errors.mm搜索CRSetCrashLogMessage实昨,把調(diào)用的地方都改為0洞豁,接著搜索CRSetCrashLogMessage,把調(diào)用的地方注釋掉荒给。
  • 提示Block_private.h file not found
    選擇./libdispatch-1008.220.2/src/BlocksRuntime/Block_private.h
  • 提示objc-shared-cache.h file not found
    選擇./dyld-551.3/include/objc-shared-cache.h
  • 提示Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_13'丈挟,這個需要打開剛剛拷貝過去的mach-o/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
  • 提示isa.h file not found志电,這個去objc4的工程的runtime文件夾里面找到isa.h,然后把它拖入工程曙咽。
  • 提示_simple.h file not found 選擇./libplatform-177.200.16/private/_simple.h

頭文件就這么多了。剩下的是配置問題

  • 提示ld: can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/AppleInternal/OrderFiles/libobjc.order挑辆,這個修改工程配置例朱,將Build Settings->Linking->Order File改為 $(SRCROOT)/libobjc.order。
  • 提示ld: library not found for -lCrashReporterClient clang: error: linker command failed with exit code 1 (use -v to see invocation) 在 Build Settings -> Linking -> Other Linker Flags里刪掉"-lCrashReporterClient"(Debug和Release都刪了)
  • 提示/xcodebuild:-1: SDK "macosx.internal" cannot be located. 把objc的Build Phases-->Run Script(markgc)里的內(nèi)容macosx.internal改為macosx
    image.png
  • 提示no such public header file: '/tmp/objc.dst/usr/include/objc/ObjectiveC.apinotes'
    把Target objc的Build Settings->Other Text-Based InstallAPI Flags里的內(nèi)容全部清除鱼蝉。
    image.png

    并且把Text-Based InstallAPI Verification Model里的值改為Errors Only
    image.png

    至此洒嗤,編譯應(yīng)該是可以了,接下來刪除掉一個警告
  • 警告Traditional headermap style is no longer supported; please migrate to using separate headermaps and set 'ALWAYS_SEARCH_USER_PATHS' to NO. (in target 'objc-trampolines')和Traditional headermap style is no longer supported; please migrate to using separate headermaps and set 'ALWAYS_SEARCH_USER_PATHS' to NO. (in target 'objc’)
    在項(xiàng)目Target->objc-trampolinesobjc中的Build Settings下設(shè)置ALWAYS_SEARCH_USER_PATHS為No蚀乔。
    至此烁竭,已經(jīng)可以編譯通過了。然后你可以在這個工程再新建一個Target來進(jìn)行調(diào)試吉挣。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末派撕,一起剝皮案震驚了整個濱河市婉弹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌终吼,老刑警劉巖镀赌,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異际跪,居然都是意外死亡商佛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門姆打,熙熙樓的掌柜王于貴愁眉苦臉地迎上來良姆,“玉大人,你說我怎么就攤上這事幔戏÷曜罚” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵闲延,是天一觀的道長痊剖。 經(jīng)常有香客問我,道長垒玲,這世上最難降的妖魔是什么陆馁? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮合愈,結(jié)果婚禮上叮贩,老公的妹妹穿的比我還像新娘。我一直安慰自己想暗,他們只是感情好妇汗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著说莫,像睡著了一般杨箭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上储狭,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天互婿,我揣著相機(jī)與錄音,去河邊找鬼辽狈。 笑死慈参,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刮萌。 我是一名探鬼主播驮配,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壮锻?” 一聲冷哼從身側(cè)響起琐旁,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猜绣,沒想到半個月后灰殴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掰邢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年牺陶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辣之。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掰伸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出召烂,到底是詐尸還是另有隱情碱工,我是刑警寧澤娃承,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布奏夫,位于F島的核電站,受9級特大地震影響历筝,放射性物質(zhì)發(fā)生泄漏酗昼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一梳猪、第九天 我趴在偏房一處隱蔽的房頂上張望麻削。 院中可真熱鬧,春花似錦春弥、人聲如沸呛哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扫责。三九已至,卻和暖如春逃呼,著一層夾襖步出監(jiān)牢的瞬間鳖孤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工抡笼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苏揣,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓推姻,卻偏偏與公主長得像平匈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容