1. 程式人生 > >iOS CPU架構(ARM指令集)

iOS CPU架構(ARM指令集)

該選項起作用的條件有兩個,必須同時滿足才會起作用:

1. 其值設定為YES

2. Xcode成功連線除錯裝置

假定我們將Build Active Architecture Only值設定為YES,同時Xcode連線上手機 iPhone 5s(匹配指令集arm64)

1. 第一種情況

Architectures:  armv7, armv7s, arm64

ValidArchitectures:  armv6, armv7s, arm64

生成二進位制包支援的指令集: arm64 

2. 第二種情況

Architectures: armv6, armv7, armv7s

Valid Architectures:  armv6, armv7s, arm64

生成二進位制包支援的指令集: armv7s 

3. 第三種情況

Architectures:  armv6, armv7

Valid Architectures: armv6, armv7s, arm64

生成二進位制包支援的指令集: armv7

4. 第四種情況

Architectures: armv6

Valid Architectures: armv6, armv7s, arm64

生成二進位制包支援的指令集: 雖然編譯成功了,但是並沒有任何目標生成, 因為從XCode4.5開始,就不再支援armv6指令集,所以列表中寫了也是白寫。

5. 第五種情況

Architectures: armv7, armv7s, arm64

Valid Architectures: armv7,armv7s

生成二進位制包支援的指令集: 編譯出錯資訊

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

可以看出:當Build Active Architecture Only起作用時:

連線的手機指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。

如連線手機為iPhone 5s,其預設指令集為arm64,若Architectures列表為armv7, armv7s,則會選取armv7s指令集為目標指令集,如果此時Valid Architectures列表中包含該指令集,則成功生成的二進位制包只支援armv7s指令集,若alid Architectures列表不包含此指令集,則編譯將會出錯:

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

同樣的,若Architectures列表為armv7,則會選取armv7作為目標指令集,若Valid Architectures列表中包含了armv7指令集,則能夠成功生成二進位制包,其支援的指令集只有armv7,若Valid Architectures列表中不包含armv7,則編譯失敗。