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
Respuestas:
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:fuente
Use the $(inherited) flag
advertencia de terminal. Y el error me trajo aquí. Me salvó el día.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í:
fuente
file
comando en Terminal para indicar qué arquitecturas admite una biblioteca estática.Resolví este problema estableciendo que:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
fuente
Me encontré con el mismo / similar problema de implementación
AVPictureInPictureController
y el problema era que no estaba vinculando el marco AVKit en mi proyecto.El mensaje de error fue:
La solución:
Espero que esto ayude a alguien más a encontrarse con un problema similar que tuve.
fuente
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 /
fuente
Configure Arquitecturas en armv7 armv7s , Construya Arquitectura Activa Solo en NO , para cada objetivo en el proyecto, incluyendo cada uno en Pods
fuente
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.
fuente
Aquí hay algunas explicaciones de por qué
build_active_architecture
se 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
fuente
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
fuente
Resuelto después de eliminar el contenido de DerivedData -> Build -> Products -> Debug-iphoneos
fuente
Esto podría estar relacionado con
libz.dylib
olibz.tbd
, solo tiene que agregarlo a sus objetivos para los binarios de enlace e intentar compilar nuevamente.fuente
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
fuente
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.
fuente
Tuve el mismo problema después de actualizar a Xcode 5.1 y lo solucioné configurando Arquitecturas en armv7 armv7s
fuente
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!
fuente
Ajuste
-ObjC
aOther Linker Flags
en configuración de generación del objetivo resuelto el problema.fuente
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í.
fuente
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:
Algunas cosas para señalar:
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!
fuente
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.fuente
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:
fuente
fuente
En mi caso, tuve que buscar
C++ Standard Library
y asegúrese de que hayalibc++
sido el seleccionado.fuente
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'
fuente
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 elPodfile
, ejecutarpod install
. Y luego, agreguepod 'TesseractOCRiOS', '~> 4.0.0'
nuevamentePodfile
y vuelva a ejecutarpod install
.¡Explosión! ¡Funciona!
fuente
"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.
fuente
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
fuente
Me enfrenté al mismo problema. Mi solución la encontré aquí: ¿por qué el enlazador vincula bibliotecas estáticas con errores? iOS
Agregar $ (TOOLCHAIN_DIR) / usr / lib / swift / $ (PLATFORM_NAME) a las rutas de búsqueda de la biblioteca solucionó el problema.
fuente
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
si su archivo de configuración no funciona correctamente, establezca su indicador de Otro vinculador en $ (heredado)
fuente
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.
fuente
Agregar "Security.framework" hizo el truco para mí.
fuente