iOS 指令集架構(gòu) armv6唐含、armv7、armv7s沫浆、arm64捷枯、arm64e、x86_64专执、i386

一淮捆、ARM架構(gòu)

ARM架構(gòu)過(guò)去稱(chēng)作進(jìn)階精簡(jiǎn)指令集機(jī)器(Advanced RISC Machine,更早稱(chēng)作:Acorn RISC Machine),是一個(gè)32位精簡(jiǎn)指令集(RISC)處理器架構(gòu)争剿,ARM處理器非常適用于移動(dòng)通訊領(lǐng)域已艰,符合其主要設(shè)計(jì)目標(biāo)為低耗電的特性痊末。

ARM和Intel處理器的第一個(gè)區(qū)別是蚕苇,前者使用精簡(jiǎn)指令集(RISC),而后者使用復(fù)雜指令集(CISC)凿叠。

二涩笤、ARM處理器指令集

ARM指令集是指計(jì)算機(jī)ARM操作指令系統(tǒng)。

armv6盒件、armv7蹬碧、armv7s、arm64炒刁、arm64e都是arm處理器的指令集恩沽,所有指令集原則上都是向下兼容的。比如翔始,你的設(shè)備是armv7s指令集罗心,那么它也可以兼容運(yùn)行比armv7s版本低的指令集:armv7、armv6城瞎。Xcode4.5起不再支持armv6渤闷。

蘋(píng)果A7處理器支持兩個(gè)不同的指令集:32位ARM指令集(armv6|armv7|armv7s)和64位ARM指令集(arm64)。
i386|x86_64 是Mac處理器的指令集脖镀。

i386通常被用來(lái)作為對(duì)Intel 32位微處理器的統(tǒng)稱(chēng)飒箭。X86-64可在同一時(shí)間內(nèi)處理64位的整數(shù)運(yùn)算,并兼容X86-32架構(gòu),x86_64是針對(duì)x86架構(gòu)的64位處理器蜒灰。當(dāng)使用iOS模擬器的時(shí)候會(huì)遇到i386|x86_64弦蹂,iOS模擬器沒(méi)有運(yùn)行arm指令集,編譯運(yùn)行的是x86指令集强窖,所以盈匾,只有在iOS設(shè)備上,才會(huì)執(zhí)行設(shè)備對(duì)應(yīng)的arm指令集毕骡。

三削饵、iOS設(shè)備支持的指令集

armv6:

iPhone, iPhone 3G, iPod 1G/2G

armv7:

iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini

armv7s:

iPhone 5, iPhone 5c, iPad 4

arm64:

iPhone X,iPhone 8(Plus)未巫,iPhone 7(Plus)窿撬,iPhone 6(Plus),iPhone 6s(Plus), iPhone 5s, iPad Air(2), Retina iPad Mini(2,3)

arm64e:

iPhone XS\XR\XS Max

四叙凡、Xcode->Build setting

1. Architectures

指定工程被編譯成支持哪些指令集類(lèi)型劈伴,而支持的指令集越多,就會(huì)編譯出很多個(gè)指令集代碼的數(shù)據(jù)包,對(duì)應(yīng)生成二進(jìn)制包就越大跛璧,也就是ipa包越大严里。

現(xiàn)在XCode->build setting 中Architectures的默認(rèn)值是Standard architectures- (ARCHS-STANDARD),(ARCHS-STANDARD)的值如下圖所示:

地址:https://pewpewthespells.com/blog/buildsettings.html#current_arch

2追城、Valid Architectures

該編譯項(xiàng)指定可能支持的指令集刹碾,該列表和Architectures列表的交集,將是Xcode最終生成二進(jìn)制包所支持的指令集座柱。

比如迷帜,你的Valid Architectures設(shè)置的支持arm指令集版本有:armv7/armv7s/arm64,對(duì)應(yīng)的Architectures設(shè)置的支持arm指令集版本有:arm64色洞,這時(shí)Xcode只會(huì)生成一個(gè)arm64指令集的二進(jìn)制包戏锹。

減少安裝包中的指令集數(shù)據(jù)包可以減小打包ipa的大小。

3火诸、Build Active Architecture Only:

指明是否只編譯當(dāng)前連接設(shè)備所支持的指令集锦针。

默認(rèn)Debug的時(shí)候設(shè)置為YES,Release的時(shí)候設(shè)置為NO置蜀。設(shè)置為YES是只編譯當(dāng)前的architecture版本奈搜,生成的包只包含當(dāng)前連接設(shè)備的指令集代碼。設(shè)置為NO盾碗,則生成的包包含所有的指令集代碼(上面的Valid Architectures跟Architectures的交集)媚污。因此為了調(diào)試速度更快,則Debug應(yīng)該設(shè)置為YES廷雅。

特殊:設(shè)置此值為YES耗美,如果連接的設(shè)備是arm64的( iPhone 5s,iPhone6(plus)等)航缀,則Valid Architecture 中必須包含arm64, 否則編譯會(huì)報(bào)錯(cuò)(報(bào)錯(cuò)的內(nèi)容在下面常見(jiàn)問(wèn)題中)商架。

五、常見(jiàn)錯(cuò)誤

1. 編譯報(bào)錯(cuò) No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

問(wèn)題起因:active architecture(當(dāng)前連接設(shè)備的指令集)為64位指令集芥玉,但是valid architecture只包含32位指令集
  解決方法:valid architecture增加arm64 (常見(jiàn)的一些帖子的解決方案是把Build Active Architecture Only設(shè)置為NO蛇摸,這是個(gè)簡(jiǎn)單粗暴的解決辦法,在Debug過(guò)程中也會(huì)生成包含所有指令集的代碼灿巧,更何況現(xiàn)在官方強(qiáng)制必須支持64位赶袄,故不建議采納)

2. No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=i386, VALID_ARCHS=x86_64).

問(wèn)題起因:跟上個(gè)問(wèn)題同理,只不過(guò)連接的設(shè)備指令集是32位指令集抠藕,但是valid architecture只包含64位指令集

解決辦法:valid architecture增加armv7

3. 導(dǎo)入靜態(tài)庫(kù)后編譯報(bào)錯(cuò)為

問(wèn)題起因:

1:可能是靜態(tài)庫(kù)中不包含這個(gè)類(lèi)饿肺。
  2:靜態(tài)庫(kù)工程可能沒(méi)有鏈接到應(yīng)用。

3:可能是因?yàn)殪o態(tài)庫(kù)(.a)為真機(jī)版本盾似,不包含模擬器版本(i386)敬辣。

解決辦法:

1:查看靜態(tài)庫(kù)里面是否存在這個(gè)類(lèi)。
  2:Build Phases中沒(méi)有添加Link Binary With Libraries 中添加此靜態(tài)庫(kù)。

3:把調(diào)試目標(biāo)換成真機(jī) 或者 導(dǎo)入一個(gè)模擬器版本跟真機(jī)版本合并的版本

同理如果導(dǎo)入的庫(kù)是模擬器版本而用真機(jī)調(diào)試也會(huì)報(bào)錯(cuò)溉跃,所以導(dǎo)入一個(gè)通用的版本是目前來(lái)講最好的辦法村刨。

4、No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)

當(dāng)Build Active Architecture Only起作用時(shí):連接的手機(jī)指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的撰茎。

5嵌牺、No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 arm64)

同樣的,若Architectures列表為armv7乾吻,則會(huì)選取armv7作為目標(biāo)指令集髓梅,若Valid Architectures列表中包含了armv7指令集拟蜻,則能夠成功生成二進(jìn)制包绎签,其支持的指令集只有armv7,若Valid Architectures列表中不包含armv7酝锅,則編譯失敗诡必。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市搔扁,隨后出現(xiàn)的幾起案子爸舒,更是在濱河造成了極大的恐慌,老刑警劉巖稿蹲,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扭勉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苛聘,警方通過(guò)查閱死者的電腦和手機(jī)涂炎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)设哗,“玉大人唱捣,你說(shuō)我怎么就攤上這事⊥遥” “怎么了震缭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)战虏。 經(jīng)常有香客問(wèn)我拣宰,道長(zhǎng),這世上最難降的妖魔是什么烦感? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任巡社,我火速辦了婚禮,結(jié)果婚禮上啸盏,老公的妹妹穿的比我還像新娘重贺。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布气笙。 她就那樣靜靜地躺著次企,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潜圃。 梳的紋絲不亂的頭發(fā)上缸棵,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音谭期,去河邊找鬼堵第。 笑死,一個(gè)胖子當(dāng)著我的面吹牛隧出,可吹牛的內(nèi)容都是我干的踏志。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼胀瞪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼针余!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凄诞,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤圆雁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后帆谍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體伪朽,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年汛蝙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烈涮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡患雇,死狀恐怖跃脊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛吱,我是刑警寧澤酪术,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站翠储,受9級(jí)特大地震影響绘雁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜援所,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一庐舟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧住拭,春花似錦挪略、人聲如沸历帚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挽牢。三九已至,卻和暖如春摊求,著一層夾襖步出監(jiān)牢的瞬間禽拔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工室叉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睹栖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓茧痕,卻偏偏與公主長(zhǎng)得像野来,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凿渊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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