Símbolos indefinidos para architecture arm64

Recibo un Apple Mach-O Linker Error cada vez que importo un archivo de CocoaPods.

Undefined symbols for architecture arm64: "_OBJC_CLASS_$_FBSession", referenced from: someFile ld: symbol(s) not found for architecture arm64 

Obtengo aproximadamente 12 de estos, para los distintos Pods que uso.

Estoy intentando construir para el iPhone 5S usando XCode 5.

He estado probando varias soluciones aquí en SO, pero aún no tengo ninguna de ellas para trabajar.

¿Cómo soluciono este error Apple Mach-O Linker?


Acabo de encontrar otra advertencia que podría ser interesante, espero que esto me lleve a la solución:

 Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a

Si sus Arquitecturas y Arquitecturas válidas son correctas, puede verificar si ha agregado $(inherited) , que agregará marcadores de enlazador generados en grupos, a otros indicadores de enlazado como se muestra a continuación: enter image description here

El problema es que los cocoapods no se han construido para la architecture arm64, por lo que no se pueden vincular cuando los construyes. Es probable que no pueda usar esos paquetes hasta que se actualicen y utilicen esa architecture. Puede corregir el error del vinculador yendo a project -> target (su nombre de proyecto) -> configuración de comstackción y cambiar architectures a architectures estándar (armv7, armv7s) y architectures válidas a armv7, armv7s.

Sin embargo, tenga en cuenta que esto significa que no obtendrá toda la potencia del procesador de 64 bits. Dijiste que estás construyendo para los 5, por lo que puede haber alguna razón por la que necesites esto. Si por algún motivo necesitas ese poder (quizás estás construyendo un juego) y necesitas desesperadamente esos archivos, puedes enviar una solicitud de extracción y luego recomstackr el proyecto para armar64 configurando esos mismos campos para armar 64 en los archivos que extraes de los proyectos de fuente abierta. Pero, a menos que realmente necesite que estos archivos sean compatibles con 64 bits, por ahora parece una exageración.

EDITAR: Algunas personas también informaron que establecer Build for Active Architectures en YES también era necesario para resolver este problema.

A partir de 2014-04-28, la configuración debería verse más o menos así:

enter image description here

Resolví este problema estableciendo eso:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

Me encontré con el mismo problema / similar que implementa AVPictureInPictureController y el problema era que no estaba vinculando el marco AVKit en mi proyecto.

El mensaje de error fue:

 Undefined symbols for architecture armv7: "_OBJC_CLASS_$_AVPictureInPictureController", referenced from: objc-class-ref in yourTarget.a(yourObject.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation) 

La solución:

  1. Ve a tu proyecto
  2. Seleccione su objective
  3. Luego, ve a Build Fhases
  4. Open Link Binary con bibliotecas
  5. Finalmente, solo agregue + el marco AVKit / cualquier otro marco .

Espero que esto ayude a alguien más a encontrarse con un problema similar que tuve.

También encontré el mismo problema, los métodos anteriores no funcionarán. Accidentalmente borré los archivos en el siguiente directorio en él.

Ubicación de la carpeta:

~ / Biblioteca / Desarrollador / Xcode / DerivedData /

enter image description here

Establezca Architectures en armv7 armv7s , Build Active Architecture Only en NO , para cada objective del proyecto, incluidos todos los Pods

Solucioné el problema revisando los archivos de implementación seleccionados en la membresía objective en el lado derecho. Esto es útil especialmente en el tratamiento de extensiones, es decir, teclados personalizados.

Membresía objetivo

alguna explicación de por qué build_active_architecture está establecido en NO. Xcode ahora detecta qué dispositivos ha conectado y configurará la architecture activa en consecuencia. Entonces, si conecta un iPod Touch de segunda generación a su computadora, Xcode debe configurar la architecture activa en armv6. Construir su objective con la configuración de Depuración anterior ahora solo creará el binario de armv6 para ahorrar tiempo (a menos que tenga un gran proyecto, puede que no note la diferencia, pero creo que los segundos se sumn con el tiempo).

Cuando crea una configuración de distribución para publicar en la tienda de aplicaciones, debe asegurarse de que esta opción no esté configurada para que cree el binario universal grueso http://useyourloaf.com/blog/2010/04/21/xcode-build-active -architecture-only.html

Resuelto después de eliminar el contenido de DerivedData -> Build -> Products -> Debug-iphoneos

Lo resolví estableciendo archios válidos para armv7 armv7s y estableciendo architectures de comstackción activa solo en SÍ en el lanzamiento y luego haciendo una nueva “instalación de pod” desde la línea de comando

Dado un iPhone 5s y aún no había recibido una versión de 64 bits de una biblioteca de terceros, tuve que volver al modo de 32 bits con el último Xcode (antes de 5.1 no me quejé).

Lo solucioné eliminando el arm64 de la lista de Arquitecturas válidas y luego estableciendo Construir architecture activa solo en NO. Me parece que esto tiene más sentido que a la inversa, como se muestra arriba. Estoy publicando en caso de que otras personas no puedan obtener ninguna de las soluciones anteriores para trabajar para ellos.

Tuve el mismo problema después de actualizar a Xcode 5.1 y lo solucioné configurando Architectures en armv7 armv7s

Había estado atascado en este tema todo el día.

Tenía varios Schemes, estaba comstackndo bien para Demo, Internal, Release, sin embargo, el esquema Debug no comstackba y se quejaba de la falta de libPods.a.

La solución fue ir al Proyecto -> Destino -> Configuración de comstackción y cambiar “Crear architecture activa solamente” a SÍ. Limpiar y construir! Finalmente, ¡horas de picazón en la cabeza resueltas!

Estableciendo -ObjC en Other Linker Flags en la configuración de construcción del objective resuelto el problema.

Esto funcionó para mí:

ios sdk 9.3

en su configuración de comstackción de la architecture válida de app.xcodeproj : armv7 armv7s Build Arquitectura activa: No

Limpiar y construir, funcionó para mí.

Esto podría estar relacionado con libz.dylib o libz.tbd , solo tiene que agregarlo a sus objectives para los binarios de enlace e intentar comstackr de nuevo.

Solo necesita eliminar arm64 de Valid Architecture y establecer NO en Active Architecture Only . Ahora solo limpia, comstack y ejecuta. No volverás a ver este error.

🙂 KP

Lo siguiente funcionó para obtener la comstackción de GPUImage sin errores en Xcode 5.1 para el simulador de 64 bits y retina iPad Mini, sin necesidad de eliminar arm64 de la lista de Arquitecturas válidas (lo que frustra el propósito de tener un dispositivo de 64 bits para probar Rendimiento de 64 bits).

Descargue la carpeta .zip de la página de GitHub: https://github.com/BradLarson/GPUImage

Descomprime, y navega a la carpeta ‘framework’. Desde aquí, agregue y copie la carpeta ‘Fuente’ en su proyecto de Xcode. Asegúrese de que ‘Copiar elementos en la carpeta del grupo de destino’ esté marcado, y que ‘Crear grupos para cualquier carpeta agregada’ también esté marcado. Esto copiará los archivos generics, de encabezado / implementación de iOS y Mac en su proyecto.

Si no necesita los archivos Mac porque está comstackndo para iOS, puede eliminar la carpeta Mac antes de copiar los archivos en su proyecto, o simplemente eliminar el grupo desde Xcode.

Una vez que haya agregado la carpeta de origen a su proyecto, solo use lo siguiente para comenzar a usar las clases / métodos de GPUImage:

 #import "Source/GPUImage.h" 

Algunas cosas para señalar:

  • Si recibe un mensaje de error que dice ‘Cocoa’ no encontrado, ha agregado la carpeta / los encabezados de Mac en su proyecto de iOS; simplemente elimine el grupo / archivos Mac de su proyecto y la advertencia desaparecerá.
  • Si cambia el nombre de la carpeta de origen (no el grupo en Xcode), use ese nombre en lugar de “Source / GPUImage.h” en la instrucción #import. Por lo tanto, si cambia el nombre de la carpeta a GPUImageFiles antes de agregarla a su proyecto, use: #import “GPUImageFiles / GPUImage.h
  • Obviamente, asegúrese de que arm64 esté seleccionado en la lista de Arquitecturas válidas para aprovechar el procesador A7 de 64 bits.
  • Este no es un paquete de GPUImage.framework (como si descargó el marco de http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage ) por lo que puede que no sea la forma correcta de usar GPUImage que pretendía Brad Larson, pero funciona para mi proyecto SpriteKit actual.
  • No es necesario vincular marcos / bibliotecas, etc., solo importe el encabezado y la carpeta fuente de implementación como se describe arriba.

Espero que lo anterior ayude, parece que no hubo instrucciones claras en ninguna parte a pesar de que la pregunta se hizo muchas veces, pero no temas, ¡GPUImage definitivamente funciona para la architecture arm64!

Este problema ocurrió después de instalar un pod a través de Podfile e pod install . Después de probar un montón de soluciones diferentes, finalmente importé el Pod manualmente (arrastrando los archivos necesarios a mi proyecto) y eso resolvió el problema.

Como respuesta morisunshine apuntó en la dirección correcta, un pequeño ajuste en su respuesta resolvió mi problema para iOS8.2. Gracias a él.

Resolví este problema estableciendo eso:

 ARCHS = armv7 VALID_ARCHS = armv6 armv7 armv7s arm64 BUILD ACTIVE ARCHITECTURE ONLY= NO 

En mi caso, tuve que buscar

C++ Standard Library y asegúrese de que libc++ sido seleccionado.

Para mí, uso opencv 2.4.9 en xcode 7.2 para iOS y ocurrieron los errores anteriores, y resuelvo los errores utilizando opencv a través de la instalación del pod en lugar del marco opencv sin conexión.

Puede probar añadiendo el texto del pod de opencv a continuación y eliminar el marco de trabajo opencv sin conexión, si lo ha utilizado.

pod ‘OpenCV’, ‘2.4.9’

Ninguna de las soluciones corrige este error en mi caso (Xcode 9), con TesseractOCRiOS . Después de horas de prueba y error, se me ocurrió una buena solución. Solo eliminé 'pod 'TesseractOCRiOS', '~> 4.0.0' en el Podfile , ejecute la pod install . Y luego, agregue el pod 'TesseractOCRiOS', '~> 4.0.0' vuelta a Podfile y ejecute la pod install nuevamente.

¡Explosión! ¡Funciona!

Me enfrento al mismo problema después de instalar el marco de AWS para solucionar este problema. He actualizado el archivo de configuración de POD de su proyecto que se creó después de instalar AWS POD. Compruebe el archivo de configuración como se muestra a continuación

 OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l" Pods- AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l "Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" -l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" -l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l" Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" -l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" -l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l "z"-framework "Accelerate" -framework "AssetsLibrary" -framework "CoreLocation" -framework "Foundation" -framework "ImageIO" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UIKit" OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 

si su archivo de configuración no funciona correctamente, configure el indicador Otro enlazador en $ (heredado)

  1. Ir a la configuración de comstackción de destino.
  2. establecer BUILD ACTIVE ARCHITECTURE ONLY = NO para Debug and Release
  3. Construir y correr

Si la configuración de la architecture y el enlazador se ven bien, verifique sus archivos h. Mi problema era el mismo error, pero había reestructurado los archivos h y eliminé una statement externa. Otros m archivos estaban usando esa variable, causando el error del enlazador.

Agregar “Security.framework” me fue el truco.

Sé que esta es una vieja twig. Sin embargo, el mismo problema comenzó a sucederme después de migrar a la última versión de CocoaPods (1.0.0) e intentar reinstalar todos los pods. Encontré el error del enlazador “Missing symbols for armv64”. Por extraño que parezca, lo resolví realizando los siguientes pasos:

  1. Eliminar todos los pods (pod init, pod)

  2. Vuelva a escribir el archivo de archivo en un orden inverso (en lugar de: pod “Mixpanel”, pod “Intercom”, he utilizado: pod “Intercom”, pod “Mixpanel”)

  3. Pod instalar

Invertir el orden de las dependencias en el archivo de pod y reconstruir los pods ha resuelto el problema.

“El objective OPN [Debug] anula la configuración de comstackción OTHER_LDFLAGS”. Este fue el problema principal. Después de agregar $ (heredado) en una nueva línea en otros indicadores del enlazador resolvió mi problema. enter image description here

en algunos casos, si define una interfaz más en un archivo .h, pero no implementó todas estas interfaces, se produjo este error.

El vinculador no puede encontrar la implementación en el archivo .m, por lo que debe implementarlo en su archivo .m para cada interfaz.

Para resolver este error:

Archivo 1.in .m, proporcione la implementación para cada interfaz. 2.rebuild