Símbolos indefinidos para arquitectura arm64.
Recibo un error del vinculador Apple Mach-O cada vez que importo un archivo desde CocoaPods.
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64
Obtengo alrededor de 12 de estos, para los distintos Pods que uso.
Estoy intentando compilar para el iPhone 5S usando XCode 5.
He estado probando varias soluciones aquí en SO, pero ninguna de ellas funciona todavía.
¿Cómo soluciono este error del vinculador Apple Mach-O?
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 están bien, puede verificar si ha agregado $(inherited)
, que agregará indicadores de enlazador generados en pods, a otros indicadores de enlazador como se muestra a continuación:
El problema es que los cocoapods aún no se han construido para la arquitectura arm64, por lo que no se pueden vincular cuando los construyes. Probablemente no pueda utilizar esos paquetes hasta que se actualicen y utilicen esa arquitectura. Puede corregir el error del vinculador yendo a proyecto -> destino (el nombre de su proyecto) -> configuración de compilación y cambiar las 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, por lo que puede haber alguna razón por la 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 recompilar 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 necesites que estos archivos sean compatibles con 64 bits, eso parece un poco excesivo por ahora.
EDITAR: Algunas personas también informaron que configurar Build For Active Architectures en SÍ también era necesario para resolver este problema.
A partir del 28 de abril de 2014, la configuración debería verse así:
Resolví este problema configurando eso:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
Me encontré con el mismo problema o similar al implementar 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:
- Ir a tu proyecto
- Selecciona tu objetivo
- Luego, vaya a Fases de construcción
- Enlace abierto binario con bibliotecas
- Finalmente, simplemente agregue + el marco AVKit /cualquier otro marco .
Con suerte, esto ayudará a alguien más a tener un problema similar al que yo tuve.