El archivo es universal (tres segmentos), pero no contiene un (n) error de segmento ARMv7-s para bibliotecas estáticas en iOS, ¿de todos modos se debe omitir?

403

He actualizado Xcode versión y cuando el uso de bibliotecas estáticas externas, consigo este mensaje:

ld: el archivo es universal (3 cortes) pero no contiene un (n) segmento de armv7s: / archivo / ubicación para la arquitectura clanv de armv7s: error: el comando del enlazador falló con el código de salida 1 (use -v para ver la invocación)

¿Hay alguna forma de evitar esto y agregar soporte a la biblioteca si el desarrollador de la biblioteca aún no ha actualizado su biblioteca?

Dafna Elazazer
fuente
Esto parece ser una buena solución por ahora - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Respuestas:

418

Si desea eliminar el soporte para cualquier arquitectura, por ejemplo, ARMv7-s en su caso, use el menú Proyecto -> Configuración de compilación -> elimine la arquitectura de "arquitecturas válidas".

Puede usar esto como una solución temporal hasta que la biblioteca se haya actualizado. Debe eliminar la arquitectura de su proyecto principal, no de la biblioteca.

Alternativamente, puede establecer el indicador de "Build Active Architecture Only" de su configuración de depuración en Sí. Deje la configuración de lanzamiento "Build Active Architecture Only" en No, para que reciba un recordatorio antes de lanzar que debe actualizar las bibliotecas de terceros que esté utilizando.

Nicholas
fuente
11
No tiene que volver a compilar la biblioteca. Puede eliminar esta bandera del proyecto que está utilizando la biblioteca.
Nicholas
44
Funcionará, ya que las aplicaciones antiguas que no han sido compiladas con soporte para armv7 también deben ejecutarse. Pero perderá algunas optimizaciones específicas. Esto debería ser una solución temporal de todos modos.
Nicholas
2
El marco de Dropbox se ha actualizado para este problema; consulte foros.dropbox.com/topic.php?id=90014
railwayparade el
66
La eliminación de armv7s de la lista de Arquitecturas válidas funcionó para mí, sin embargo, también lo eliminó de Arquitecturas. En ambos casos, sin embargo, obtendría No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).del enlazador que solo podría resolver agregando i386a la lista de Arquitecturas válidas.
levigroker
66
No, armv7s es el conjunto de instrucciones del procesador A6 que se está utilizando en el iPhone 5. Dado que el A6 es compatible con versiones anteriores, seguirá ejecutando el conjunto de instrucciones armv7.
Nicholas
191

Simplemente cambié "Construir arquitectura activa solamente" a "Sí" en la configuración de compilación del objetivo, ¡y ahora está bien!

Blasco73
fuente
1
@ Blasco73 ¿Sabes que eres increíble? Debieras. Aquí va, señor, ¡son increíbles!
thandasoru
15
¿Cómo puede ser una buena solución? Elimina el error, pero solo obtienes compilación para el arco actual, no todos en el mercado ...
esbenr
27

Intente eliminar armv7s de la "Arquitectura válida" del proyecto para liberar este problema para el teléfono iOS 5.1

Arthur Jen
fuente
13

Acabo de publicar una solución aquí que también se aplicaría en este caso, básicamente, haces un hexadecimal buscar y reemplazar en tu biblioteca externa para que piense que es el código ARMv7s. Debería poder usarlo lipopara dividirlo en 3 bibliotecas estáticas, duplicar / modificar el ARMv7 y luego usarlo liponuevamente para ensamblar una nueva biblioteca para las 4 arquitecturas.

Ertebolle
fuente
5

Compatibilidad con Flurry para iPhone 5 (ARMv7s) Como mencioné en la publicación de ayer, Flurry comenzó a trabajar en una versión del SDK de iOS para admitir el procesador ARMv7s en el nuevo iPhone 5 inmediatamente después del anuncio el miércoles.

Me complace decirle que el trabajo está hecho y que el SDK ya está disponible en el sitio.

RAZ
fuente
4

use el menú Proyecto -> Configuración de compilación ->

luego elimine armv7s de las "arquitecturas válidas". Si se ha elegido el estándar, elimínelo y luego agregue armv7.

Panky
fuente
1

En caso de que esto le pase a alguien. Construí mi propia biblioteca para usar con un código de terceros. Mientras lo construía para entregar, accidentalmente dejé mi iPhone 4S enchufado, por lo que Xcode construyó mi biblioteca solo para la arquitectura conectada en lugar de seguir la configuración del proyecto. Elimine todos los dispositivos conectados y reconstruya la biblioteca, vincúlela, y debería estar bien.

Espero eso ayude.

Raphael Ayres
fuente
0

En mi caso, estaba vinculando a una biblioteca de terceros que era un poco antigua (desarrollada para iOS 6, en XCode 5 / iOS 7). Por lo tanto, tuve que actualizar la biblioteca de terceros, hacer una limpieza y compilación, y ahora se compila correctamente.

Jay Imerman
fuente