5

Tengo un proyecto de Xcode que tiene un objetivo de biblioteca estática "maestra", que incluye/enlaces a otras bibliotecas estáticas de otros proyectos de Xcode.Biblioteca estática de construcción de iPhone para armv6 y armv7 que incluye otra biblioteca estática

Al generar el objetivo de la biblioteca maestra para "Optimizado (armv6 armv7)", se produce un error en la última fase, durante el paso CreateUniversalBinary. Para cada archivo .o de las bibliotecas que se incluye por la biblioteca principal, se reportó el siguiente error (por ejemplo, el archivo FBConnectGlobal.o):

warning for architecture: armv6 same member name (FBConnectGlobal.o) 
in output file used for input files: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv6/libMTToolbox.a(FBConnectGlobal.o) 
and: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv7/libMTToolbox.a(FBConnectGlobal.o) 
due to use of basename, truncation and blank padding 

Al final, Xcode dice que la construcción ha tenido éxito . Sin embargo, al usar la biblioteca estática final en un proyecto de aplicación, no se compilará porque encuentra símbolos duplicados en una parte de la construcción (armv6) y omite símbolos en la otra parte de la construcción (armv7).

¿Alguna idea de cómo solucionar esto?

M

+0

No cree bibliotecas en otras bibliotecas: es una receta para confusión, errores de símbolos duplicados y resultados difíciles de depurar . Mira esta pregunta: http://stackoverflow.com/questions/2300867/how-can-i-avoid-duplicate-symbol-errors-in-xcode-with-shared-static-libraries/2300873#2300873 –

+0

Carl, gracias . Quizás podrías publicar eso como respuesta a mi pregunta en lugar del comentario, para poder marcarla como respondida. –

Respuesta

3

No construir bibliotecas en otras bibliotecas - es una receta para la confusión, duplicar errores de símbolos, y los resultados difíciles de depurar. Echa un vistazo a esta pregunta: How can I avoid "duplicate symbol" errors in xcode with shared static libraries?

+0

Tengo que estar de acuerdo aquí. No sé qué es lo mejor en teoría, pero en la práctica, acabo de pasar un par de semanas retocando, alternando y engatusando todos los ajustes de construcción y configuración bajo el sol. Al final, lo único que funcionaba era eliminar TODAS las bibliotecas estáticas (ambos archivos binarios Y proyectos dependientes para construir bibliotecas estáticas) de la biblioteca estática que dependía de mi aplicación. No vincules bibliotecas a bibliotecas. No seas un héroe Simplemente adjunte todo a su aplicación directamente. Ahorre montones de tiempo en el proceso. – Prairiedogg

5

No creo que esa sea la respuesta en absoluto. Funcionará totalmente si no tienes dos arquitecturas allí. En el ejemplo dado en el enlace, es posible vincular las bibliotecas a, b y c en una sola biblioteca y vincularlas con eso.

El problema que Carl está teniendo es que hay dos arquitecturas diferentes en la biblioteca (arm6 y arm7) y el enlazador no las puede resolver correctamente.

Encontré el problema. Es un error en libtool por lo que puedo decir. Ver mi post para una solución:

https://binaryfinery.wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk/

+0

¡Me salvaste el día! ¡Gracias! –

+0

SOB blog está abajo :(es por eso que las buenas respuestas de SO no publican enlaces pero publican datos significativos! – Kaa

+0

lo siento. ¡No creo que sigamos leyendo sobre esto siete años después! Un enlace de trabajo es https: // binaryfinery .wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk / – jamie

1

Otra solución que he encontrado es para configurar arquitecturas para "ARMv6". ARCHS_STANDARD_32_BIT cambió de armv6 a "armv6 armv7", lo que agrava el error de libtool que describió anteriormente. Obviamente, no producirá binarios optimizados para armv7, pero aún debería funcionar bien en el iPhone 4.

Cuestiones relacionadas