¿Cómo se evita bloques de código a partir de la compilación de ARMv6 para un binario de grasa?

StackOverflow https://stackoverflow.com/questions/4397894

  •  10-10-2019
  •  | 
  •  

Pregunta

Tengo un proyecto para el iPhone configurado para compilar para ARMv6 y arquitecturas ARMv7. Y necesito para excluir un cierto código de compilación para la arquitectura ARMv6 porque provoca accidente en el dispositivo de tiempo de ejecución (mal excepción de instrucción).

¿Hay una definen para ARMv6 / rutas de compilación ARMv7 (como "_DEBUG")?

¿Fue útil?

Solución

En primer lugar, no es necesario para evitar que compilación , es necesario evitar que sean ejecutados. El accidente es en tiempo de ejecución, después de todo, no el tiempo de compilación.

Dicho esto, la manera más fácil de hacer esto es tener dos rutas de código, y compilar la sección apropiada basada en la arquitectura:

#if defined _ARM_ARCH_7
// your armv7 implementation goes here
#elif defined _ARM_ARCH_6
// your armv6 implementation goes here
#elif defined __i386__
// a simulator implementation could go here, if you had one
#else
#error Unknown Architecture!
#endif

Otros consejos

Una solución podría ser la de reunir todas las fuentes ARMv6 sólo en un subproyecto y compile como una biblioteca estática, a continuación, vincular esa biblioteca en la aplicación de grasa.

También se puede especificar banderas de construcción adicionales por cada archivo de origen en Xcode, pero no estoy familiarizado con la sintaxis o qué otra cosa sería necesaria para revertir esencialmente una bandera ya emitido (por ejemplo, la bandera para especificar la compilación bajo ARMv7.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top