2012-10-03 20 views

Respuesta

98

Las arquitecturas son las que desea construir, las arquitecturas válidas son las que podría concebir construir con su código base.

Así que tal vez solo quiera construir su binario para armv7s, pero el mismo código fuente compilaría bien para armv7 y armv6. Así que VALID_ARCHS = armv6 armv7 armv7s, pero estableces ARCHS = armv7s porque eso es todo lo que realmente quieres que construya con tu código.

O, en Apple-ESE:

ARCHS (Arquitecturas)

lista separada por espacios de identificadores. Especifica las arquitecturas (ABI, modelos de procesador) a las que se dirige el binario. Cuando esta configuración de compilación especifica más de una arquitectura, el binario generado puede contener código objeto para cada una de las arquitecturas especificadas.

y:

VALID_ARCHS (Arquitecturas válido)

lista separada por espacios de identificadores. Especifica las arquitecturas para las cuales se puede construir el binario. Durante la compilación, esta lista se cruza con el valor de la configuración de compilación ARCHS; la lista resultante especifica las arquitecturas en las que se puede ejecutar el binario. Si la lista de arquitectura resultante está vacía, el objetivo no genera ningún binario.

Fuente: Xcode Build Setting Reference

En la práctica, se dejan VALID_ARCHS solo y no se preocupe por el cambio, y simplemente jugar con ARCHS para establecer las arquitecturas que desea construir. Normalmente, establece una compilación de depuración en solo NATIVE_ARCH, ya que solo desea construir la versión de depuración para la máquina en la que lo probará/ejecutará, y lanzar compilaciones para todo el espectro de arquitecturas que planea admitir.

+0

¿Alguien sabe dónde se puede encontrar esta "lista de arquitectura resultante" ????????? – DanMoore

+1

@DanMoore La "lista de arquitectura resultante" se realiza en la memoria en tiempo de compilación. – Saltymule

+2

@ JeremyW.Sherman parece que VALID_ARCHS es inútil? – onmyway133

4

De documento de Apple, sabemos que el Xcode binario se compilará es la lista Valid Architectures cruzada con Architectures.

Por lo tanto, no creo que la respuesta de Jeremy es justo, como él dice:

Así que tal vez sólo desea construir su binario para armv7s, pero el mismo código fuente habría
compilarse bien para ARMv7 y armv6. Así que VALID_ARCHS = armv6 armv7 armv7s, pero estableces ARCHS = armv7s porque eso es todo lo que realmente quieres construir con tu código.

cuando se establece VALID_ARCHS = armv6 armv7 armv7s y establezca ARCHS = armv7s, el resultado de Xcode binaria va a construir es armv7s, podría no es compatible con ARMv6/ARMv7.

Y si quiere ser compatible con armv6/armv7/armv7s, debe establecer VALID_ARCHS = armv6 armv7 armv7s y ARCHS = armv6.De esta forma, el resultado de la construcción binaria de Xcode es armv6, y puede funcionar bien en ambos armv6/armv7/armv7s ya que el procesador de brazo es compatible con versiones anteriores.

+1

Tenía razón: "porque eso es todo ** lo que realmente quiere construir ** con su código". – Laszlo

Cuestiones relacionadas