2012-03-07 9 views
9

Tengo una aplicación publicada que admite amrv6 y armv7. Ahora tengo una actualización que solo es compatible con armv7 (agregué una biblioteca externa que depende de armv7). Cuando trato de enviar la aplicación a la tienda, obtengo el error detailed incompilación condicional para armv6 y armv7

Entiendo el error anterior y necesito cambiar mi aplicación para que admita ambas arquitecturas. Mi problema es que mi código depende de una biblioteca que solo cumpla con armv7. Si cambio las propiedades de mi proyecto para que sean compatibles tanto con armv6 como con armv7, aparece un error de compilación (detalles a continuación). Necesito poder compilar el código con soporte para ambas arquitecturas: compilaciones de armv7 usando la biblioteca Depende de armv6 tiene un código diferente que no depende de la biblioteca.

¿Cómo puedo lograrlo?

Detalles del error:

• the compile crash is in one Lib file (.a) and the error says : ld: warning: directory not found for option '-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc/arm-apple-darwin10/4.0.1' ld: in /Users/.../(lib file).a, file is universal but does not contain a(n) armv6 slice for architecture armv6 Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1

Gracias de antemano

+3

Es posible que desee etiquetar su pregunta con iOS y xcode. Es más una cuestión sobre cómo producir binarios universales con esta cadena de herramientas que una cuestión de rodar su propio despachador dependiente de la arquitectura en el ensamblaje de ARM. –

Respuesta

4

Bueno me di cuenta de que mi última respuesta en no la correcta ... Apple dijo que es imposible pero esto no es realmente cierto ... gracias a Jim, busco poco más y he encontrado una manera de hacerlo ..

  1. Retire lib de "Fases de compilación"
  2. Añadir ambas arquitecturas en "Otras banderas Linker" (Build Ajustes), para eso se necesita hacer clic en + y añadir ARMv6 y ARMv7
  3. Añadir la lib en ARMv7 .. con -l
  4. No se olvide #if defined _ARM_ARCH_7 en su código

Esto es como Jim respondió, pero más detallada.

1

En los valores de creación, si se pasa sobre un escenario, un + parece que usted puede hacer clic en al alcance un ajuste a un determinado arquitectura. Tendrá que eliminar la biblioteca de la lista normal de bibliotecas y agregarla pasando el argumento -L manualmente solo para armv7. Probablemente también deba agregar una definición de preprocesador para que pueda poner #ifdef s alrededor del código que llama a la biblioteca.

Editar: Pensando en ello, es posible que pueda hacerlo de una manera más sencilla marcando la biblioteca como opcional en la sección de fases de construcción.

+1

Gracias! pero no entiendo dónde/qué es "eliminar la biblioteca de la lista normal de bibliotecas", cambié "Rutas de búsqueda de bibliotecas" y "Otras banderas de enlaces", con '' 'creo dos líneas con armv6 y armv7. Pero ahora tengo un nuevo error y los detalles dicen "... no encontré l (lib) .a" ... algo está llamando al Lib ... elimino todas las evidencias en el código y también "opcional" en la sección de fases de compilación ... entonces probablemente necesito eliminarlo en la "lista normal" como dijiste. – silvaric

+0

Te di dos alternativas. No deberías tratar de hacer ambas cosas a la vez. – Jim

2

he recibido esta respuesta de Apple:

No se puede condicionalmente construir su aplicación, ya sea para ARMv6 o ARMv7. Su biblioteca estática debe ser desarrollada tanto para armv6 como para armv7, ya que su aplicación admite ambas arquitecturas ... Puede soltar el soporte para armv6 configurando su destino de implementación de iOS en 4.3 o superior.

Básicamente necesito pedir el desarrollador de la biblioteca de construir para los dos allí arquitecturas (= /) o he puesto mi objetivo mínimo de 4.3 y sólo ARMv7

0

Lo siento, pegué algo incorrecto del portapapeles.

que quería decir:

basta con quitar la mala arquitectura de Arquitecturas válidos en Target Ajustes Aguilar y ya está bueno para ir :)

0

que tenía el mismo Problema así que cambié: "Construir Activar Sólo Arquitectura "para sí (en el destino -> Configuración de creación"

Esto funciona ... por ahora

imagino mi aplicación no funcionará en un iPhone 5, pero tendrá que esperar hasta el. proveedor de la biblioteca estática que estoy usando construir s para armv7/armv7s

0

Tuve este problema para el SDK de iOS de Google Analytics. Simplemente reemplazando la biblioteca con la última versión es lo que resolvió este problema para mí.

Cuestiones relacionadas