Símbolos indefinidos para arquitectura arm64

200

Recibo un error de Apple Mach-O Linker 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

Recibo alrededor de 12 de estos, para los diversos Pods que uso.

Estoy tratando de construir para el iPhone 5S usando XCode 5.

He estado probando varias soluciones aquí en SO, pero todavía no tengo ninguna de ellas.

¿Cómo soluciono este error de 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

GangstaGraham
fuente
Solución simple Vaya a Target -> Vinculación -> otro indicador de vinculador y agregue $ (heredado) en otro indicador de vinculador tanto en Depuración como en Liberación.
Mihir Oza

Respuestas:

248

Si sus Arquitecturas y Arquitecturas válidas están bien, puede verificar si ha agregado $(inherited), lo que agregará indicadores de vinculador generados en pods, a Otros indicadores de vinculador de la siguiente manera: ingrese la descripción de la imagen aquí

chancyWu
fuente
77
@chancyWu ¿Podría explicarlo?
Paul Brewczynski
55
Además, si esto todavía no funciona, agregue @ (heredado) a las rutas de búsqueda de la biblioteca también.
Enrico Susatyo
1
Lol, ignorado Use the $(inherited) flagadvertencia de terminal. Y el error me trajo aquí. Me salvó el día.
Sushil Sharma
2
Estoy trabajando con Xcode 7.2 y en otras banderas de vinculador -> Depurar veo: -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ... aquí agregué $ (heredado) pero no lo hace ' t trabajo
Alessandra
Me salvaste mucho tiempo. Gracias.
Nirmalsinh
123

El problema es que los cocoapods no se han construido para la arquitectura arm64, por lo que no se pueden vincular cuando los construyes. Probablemente no pueda usar esos paquetes hasta que estén actualizados y use esa arquitectura. Puede corregir el error del enlazador yendo a proyecto -> destino (el nombre de su proyecto) -> configuración de compilación y cambiar arquitecturas a arquitecturas estándar (armv7, armv7s), y arquitecturas 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, así que puede haber alguna razón para que necesites esto. Si por alguna razón necesitas absolutamente ese poder (tal vez estás creando un juego) y necesitas desesperadamente esos archivos, puedes enviar una solicitud de extracción y luego volver a compilar el proyecto en arm64 configurando esos mismos campos en arm64 en los archivos que extrajiste Los proyectos de código abierto. Pero, a menos que realmente necesite que estos archivos sean compatibles con 64 bits, eso parece un poco exagerado por ahora.

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

A partir del 28/04/2014, la configuración debería verse así:

ingrese la descripción de la imagen aquí

AdamG
fuente
44
Esto resolvió el error, al ejecutar en el simulador, sin embargo, no resolvió el error al ejecutar en el dispositivo. Pods fue rechazado por libPods.a porque sus arquitecturas '' (por alguna razón, no lo detecta, aunque puedo verlo en Xcode) no contenían todas las arquitecturas requeridas 'armv7 armv7s'
GangstaGraham
77
Ok, obtuve esto estableciendo Build For Active Architectures en Yes. Muchas gracias!
GangstaGraham
2
Aparte: puede usar el filecomando en Terminal para indicar qué arquitecturas admite una biblioteca estática.
Funroll
8
Acabo de entrar aquí para agregar al coro: seleccionar SÍ para CONSTRUIR ARQUITECTURAS ACTIVAS es la mejor opción aquí.
Wells
56
Esto ya no es una solución. Apple ahora exige soporte para 64 bits para todas las implementaciones.
52

Resolví este problema estableciendo que:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

Morisunshine
fuente
1
Tuve un problema similar al usar XCode 5.1 por primera vez, esto lo solucionó. ¡Gracias!
GangstaGraham
@morisunshine estás seguro, ¿has verificado las arquitecturas binarias después de la compilación?
onmyway133
@ onmyway133 Lo he comprobado, pero ahora no he encontrado este problema en el nuevo XCode.
morisunshine
@morisunshine sí, quiero decir que pierdes el brazo64
onmyway133
No más errores de compilación, hasta este momento está bien. Pero al subir la acumulación archivado, estoy consiguiendo poco arm64 de error como soporte poco arm64 falta es una compulsión a partir del 1 de febrero de 2015.
zeeawan
45

Me encontré con el mismo / similar problema de implementación AVPictureInPictureControllery 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. Selecciona tu objetivo
  3. Luego, ve a Fases de construcción
  4. Abrir enlace binario con bibliotecas
  5. Finalmente, simplemente agregue + el marco AVKit / cualquier otro marco .

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

valbu17
fuente
66
Sí, vale la pena mencionar que este es un error que se genera si te falta un marco. Una pista es que intentas eliminar arquitecturas y la siguiente / restante falla también ...
Kristen Waite
1
buen trabajo. `" _OBJC_CLASS _ $ _ XXXXXClass ", referenciado desde:` ,, add xxx Framework.
iHTCboy
¡Correcto! Cualquiera que vea algo con 'xml' impreso compruebe esto: en mi caso, el marco 'libxml' no está vinculado.
Evusas
Después de modificar la introducción de pod, se produjo este error y no se corrigieron todos los métodos. Pero su método soluciona el problema. Nota: no se puede buscar lib.
Stellar Lee
33

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

Colocación de la carpeta:

~ / Library / Developer / Xcode / DerivedData /

ingrese la descripción de la imagen aquí

ylgwhyh
fuente
3
Por extraño que parezca, esto realmente funcionó. Gracias amigo.
Felipe
2
La eliminación manual de datos derivados también me sirvió. ¡Salud!
L_Sonic
77
¡Gracias! Me gustaría agregar algunas sugerencias: la carpeta está en / Usuario / nombre / Biblioteca / Desarrollador / Código X / DerivedData
Stefano Buora
También debería poder eliminar los datos derivados utilizando el terminal: rm -rf ~ / Library / Developer / Xcode / DerivedData
simon_smiley
Me ahorró tiempo ... XDDD
Hsiao-Ting
25

Configure Arquitecturas en armv7 armv7s , Construya Arquitectura Activa Solo en NO , para cada objetivo en el proyecto, incluyendo cada uno en Pods

BabyPanda
fuente
Trabajó más o menos ... Ahora recibo el error "Firma de código de bits no válido".
JeremyF
18

Arreglé el mío comprobando los archivos de implementación seleccionados en la membresía de destino en el lado derecho. Esto es útil especialmente para tratar extensiones, es decir, teclados personalizados.

Membresía objetivo

jaytrixz
fuente
Xcode 9 no aplica esto automáticamente, incluso si está marcada la casilla de verificación. Gracias.
Amro Shafie
Ese fue el problema. Gracias
Ignacio Hernández
11

Aquí hay algunas explicaciones de por qué build_active_architecturese establece en NO. Xcode ahora detecta qué dispositivos ha conectado y configurará la arquitectura activa en consecuencia. Entonces, si conecta un iPod Touch de segunda generación a su computadora, Xcode debería configurar la arquitectura activa en armv6. Construir su objetivo con la configuración de depuración anterior ahora solo construirá el binario armv6 para ahorrar tiempo (a menos que tenga un gran proyecto, puede que no note la diferencia, pero supongo que los segundos se suman con el tiempo).

Cuando crea una configuración de Distribución para publicar en la App Store, debe asegurarse de que esta opción no esté configurada, de modo que Xcode compile en su lugar el binario universal gordo http://useyourloaf.com/blog/2010/04/21/xcode -build-active-architecture-only.html

Moaz Saeed
fuente
Eso es increíblemente FUBARed! ¡La salida de XCode depende del dispositivo que haya conectado a la máquina de compilación!
Matt
6

Solo necesita eliminar arm64 de Valid Architecture y establecer NO en Active Architecture Only . Ahora solo Clean, Build and Run. No volverá a ver este error.

:) KP

Kalpesh Panchasara
fuente
5

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

Tamir Avrahamov
fuente
4

Esto podría estar relacionado con libz.dylibo libz.tbd, solo tiene que agregarlo a sus objetivos para los binarios de enlace e intentar compilar nuevamente.

TonyTony
fuente
Estaba tratando de agregar el marco Tesseract, y solo esto me ayudó, gracias. !
HelloimDarius
3

Lo resolví configurando archs válidos en armv7 armv7s y configurando arquitecturas activas solo en SÍ en la versión y luego haciendo una nueva "instalación de pod" desde la línea de comandos

Fabio Russo
fuente
3

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 se quejaba).

Solucioné esto eliminando arm64 de la lista de Arquitecturas válidas y luego configurando Build Active Architecture Only en NO. Me parece que esto tiene más sentido que al revés como se muestra arriba. Estoy publicando en caso de que otras personas no puedan obtener ninguna de las soluciones anteriores para trabajar para ellos.

usuario938797
fuente
3

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

deko
fuente
3

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

Tenía varios esquemas, estaba compilando bien para Demo, Internal, Release, sin embargo, el esquema de depuración simplemente no se compilaba y se quejaba de la falta de libPods.a.

La solución fue ir al Proyecto -> Destino -> Configuración de compilación y cambiar "Construir solo arquitectura activa" a SÍ. Limpiar y construir! ¡Por fin horas de picazón en la cabeza resueltas!

Desarrollo de juegos
fuente
No es exactamente el mismo problema que tú, pero similar. Lo resolví con el mismo método que usted proporcionó.
Helzgate
2

Ajuste -ObjCa Other Linker Flagsen configuración de generación del objetivo resuelto el problema.

Thomas G.
fuente
2

Esto funcionó para mí:

ios sdk 9.3

en su configuración de compilación de app.xcodeproj arquitectura válida: armv7 armv7s Build Arquitectura activa: No

Limpiar y construir, funcionó para mí.

Shashank Saxena
fuente
1

Lo siguiente funcionó para mí para obtener la compilación de GPUImage sin errores en Xcode 5.1 tanto para el simulador de 64 bits como para el iPad Mini de retina, sin necesidad de eliminar arm64 de la lista de Arquitecturas válidas (que anula el propósito de poseer 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

Descomprima y navegue a la carpeta 'marco'. Desde aquí, agregue y copie la carpeta 'Fuente' en su proyecto Xcode. Asegúrese de que la opción "Copiar elementos en la carpeta del grupo de destino" esté marcada y que la opción "Crear grupos para cualquier carpeta agregada" también esté marcada. Esto copiará los archivos genéricos, de encabezado / implementación de iOS y Mac en su proyecto.

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

Una vez que haya agregado la carpeta Fuente a su proyecto, simplemente 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 error que dice que no se encuentra 'Cocoa', ha agregado la carpeta / encabezados de Mac en su proyecto de iOS: simplemente elimine el grupo / archivos de Mac de su proyecto y la advertencia desaparecerá
  • Si cambia el nombre de la carpeta Fuente (no el grupo en Xcode), use ese nombre en lugar de "Fuente / GPUImage.h" en la instrucción #import. Entonces, si cambia el nombre de la carpeta a GPUImageFiles antes de agregar 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 hubiera descargado el marco desde http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage ), por lo que puede no ser la forma correcta de usar GPUImage que Brad Larson pretendía, pero funciona para mi proyecto SpriteKit actual.
  • No es necesario vincular a frameworks / bibliotecas, etc., solo importe el encabezado y la carpeta de origen de implementación como se describió anteriormente

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

carril inaccesible
fuente
1

Este problema me ocurrió después de instalar un pod a través de Podfile y 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.

Will Dennis
fuente
eso también funcionó para mí, pero fue un pod fácil con un archivo.
iluvatar_GR
1

Como morisunshine respuesta de apuntaba 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 que:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
SandeepAggarwal
fuente
1
  1. Vaya a la configuración de compilación de destino.
  2. establecer CONSTRUIR ARQUITECTURA ACTIVA SOLAMENTE = NO tanto para depurar como para liberar
  3. Construye y corre
Zia
fuente
3
¡establezca CREAR ARQUITECTURA ACTIVA SOLAMENTE en NO en el proyecto PODS también!
Elad
1

En mi caso, tuve que buscar

C++ Standard Libraryy asegúrese de que haya libc++sido el seleccionado.

Etienne Noël
fuente
1

Para mí, uso opencv 2.4.9 en xcode 7.2 para iOS y se produjeron los errores anteriores, y resuelvo los errores usando opencv a través de la instalación de pod en lugar del framework opencv fuera de línea.

Puede intentarlo agregando el texto del pod de opencv a continuación y elimine el marco de trabajo de opencv fuera de línea si lo ha utilizado.

pod 'OpenCV', '2.4.9'

Chuyang
fuente
1

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. Acabo de eliminar 'pod 'TesseractOCRiOS', '~> 4.0.0'en el Podfile, ejecutar pod install. Y luego, agregue pod 'TesseractOCRiOS', '~> 4.0.0'nuevamente Podfiley vuelva a ejecutar pod install.

¡Explosión! ¡Funciona!

Benjamin Wen
fuente
1

"El objetivo OPN [Debug] anula la configuración de compilación OTHER_LDFLAGS". Este fue el problema principal. Después de agregar $ (heredado) en una nueva línea en otras banderas de enlace resolvió mi problema. ingrese la descripción de la imagen aquí

Mohsen mokhtari
fuente
1

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 implementarla en su archivo .m para cada interfaz.

Para resolver este error:

1.en el archivo .m, proporcione la implementación para cada interfaz. 2.reconstruir

Michael Yang
fuente
0

Tengo el mismo problema después de instalar el marco de AWS para superar este problema, he actualizado el archivo de configuración de POD de su proyecto que se creó después de instalar AWS POD. Verifique 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, establezca su indicador de Otro vinculador en $ (heredado)

Swapnil1156035
fuente
0

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

Mella
fuente
0

Agregar "Security.framework" hizo el truco para mí.

Eran Talmor
fuente