ios xcode compiler-construction linker cpu-architecture

ios - ¿Hay una bandera del compilador que indique falta de arquitectura de armv7s?



xcode compiler-construction (2)

No es posible cargar un marco que no incluya la arquitectura de destino.

Lo que podrías hacer es enviar solo una aplicación armv7 hasta que se actualicen los marcos. La aplicación seguirá funcionando en el iPhone 5, pero no utilice las optimizaciones de rendimiento más recientes que ofrece.

O si pudieras vivir sin el marco en la nueva arquitectura, podrías vincularlo débilmente. Pero luego debe verificar su código si está cargado en cualquier lugar donde use cosas del marco.

Con el iPhone 5 y otros dispositivos con armv7s apareciendo ahora, existen problemas de compatibilidad con marcos de terceros existentes (de código cerrado) como Flurry que se construyen sin esta arquitectura más nueva.

Una opción es esperar hasta que lanzan una nueva compilación, pero esperaba que pudiera haber una bandera de compilación o algo que pudiera usar en mi proyecto de Xcode que le permitiera al enlazador saber que no esperaba la arquitectura de armv7s de este marco, y usar el brazo7 en lugar. ¿Existe algo como esto?


Solía ​​haber un indicador de enlazador en GCC, allow_sub_type_mismatches , que le permitiría mezclar y combinar versiones de arquitectura ARM en bibliotecas vinculadas, pero parece que se han llevado eso en versiones recientes de Xcode.

Sin embargo, esto puede ser pirateado de una manera diferente; haga una copia del marco, vea su contenido, abra el archivo de la biblioteca de código real dentro de un editor hexadecimal y haga lo siguiente por reemplazar todo:

CEFAEDFE 0C000000 09000000

a

CEFAEDFE 0C000000 0B000000

Lo que básicamente haces es cambiar el encabezado dentro de cada objeto de código para identificarlo como ARMv7s en lugar de un código ARMv7: los conjuntos de instrucciones son compatibles con versiones anteriores (o parecen serlo, de todos modos), por lo que debería funcionar bien incluso con este truco , aunque tengo que admitir que no lo sabremos con certeza hasta que realmente tengamos la oportunidad de probarlo en un iPhone 5.

De todos modos, una vez que haya modificado el marco, simplemente agregue ambas versiones a su proyecto y vincule con el apropiado de cada arquitectura. También es posible que pueda crear un nuevo marco único utilizando lipo para fusionar las bibliotecas modificadas y originales.