2012-10-03 14 views

risposta

98

Le architetture sono quelle che si desidera costruire, le architetture valide sono quelle che si potrebbero immaginare di costruire con il codice base.

Quindi forse vuoi solo costruire il tuo binario per armv7s, ma lo stesso codice sorgente potrebbe essere compilato bene per armv7 e armv6. Quindi, VALID_ARCHS = armv6 armv7 armv7s, ma hai impostato ARCHS = armv7s perché è tutto ciò che in realtà è vuoi da compilare con il tuo codice.

Oppure, a Apple-ese:

ARCHI (architetture)

elenco separato da spazi di identificatori. Specifica le architetture (ABI, modelli di processore) a cui il binario è mirato. Quando questa impostazione di build specifica più di un'architettura, il file binario generato può contenere codice oggetto per ciascuna delle architetture specificate.

e:

VALID_ARCHS (Architetture validi)

elenco separato da spazi di identificatori. Specifica le architetture per le quali è possibile creare il binario. Durante la compilazione, questo elenco viene intersecato con il valore dell'impostazione di build ARCHS; l'elenco risultante specifica le architetture su cui può essere eseguito il binario. Se la lista dell'architettura risultante è vuota, la destinazione non genera binari.

Sorgente

: Xcode Build Setting Reference

In pratica, si lascia VALID_ARCHS soli e non preoccuparsi di cambiare, e solo giocherellare con ARCHS per impostare le architetture si vuole costruire. In genere, si imposta una build Debug su solo NATIVE_ARCH, dal momento che si desidera solo creare la versione di debug per la macchina su cui si eseguirà il test/l'esecuzione e Release build per l'intero spettro di architetture che si intende supportare.

+0

Qualcuno sa dove si può trovare questa "lista di architettura risultante" ????????? – DanMoore

+1

@DanMoore La "lista dell'architettura risultante" viene eseguita in memoria al momento della compilazione. – Saltymule

+2

@ JeremyW.Sherman sembra VALID_ARCHS è inutile? – onmyway133

4

Dal documento Apple, sappiamo che il codice Xcode binario verrà generato dall'elenco Valid Architectures intersecato con Architectures.

Quindi, non credo che la risposta di Jeremy è giusto, come egli dice:

Così forse si desidera solo costruire il tuo binario per armv7s, ma lo stesso codice sorgente sarebbe
compilare bene per ARMv7 e armv6. Quindi, VALID_ARCHS = armv6 armv7 armv7s, ma hai impostato ARCHS = armv7s perché è tutto ciò che vuoi veramente costruire con il tuo codice.

Quando impostato VALID_ARCHS = armv6 armv7 armv7s, e impostare ARCHS = armv7s, il risultato di Xcode binario costruirà è armv7s, potrebbe non è compatibile con ARMv6/ARMv7.

E se si desidera compatibile con armv6/armv7/armv7s, è necessario impostare VALID_ARCHS = armv6 armv7 armv7s e ARCHS = armv6.In questo modo, il risultato della creazione di Xcode binario è armv6, e può funzionare bene su armv6/armv7/armv7s poiché il processore di arm è compatibile con le versioni precedenti.

+1

Aveva ragione: "perché è tutto ** tu in realtà vuoi costruire ** con il tuo codice." – Laszlo