Tengo que construir una biblioteca estática. Quiero usarlo en mi aplicación para iPhone y ipad. Cuando intento ejecutar el simulador, obtengo errores de enlace. Soy nuevo en el desarrollo de iOS. amablemente ayuda
ld: advertencia: ignorando el archivo /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, el archivo fue creado para el archivo que no es la arquitectura que se está vinculando (i386) Símbolos indefinidos para la arquitectura i386:
"_OBJC_CLASS _ $ _ netUtils", referenciado desde : objc-class-ref en ViewController.o ld: símbolo (s) no encontrado para la arquitectura i386 clang: error: el comando del enlazador falló con el código de salida 1 (use -v para ver la invocación)
Intenté agregar i386 en Architectures. pero no suerte
Build Settings -> Build Active Architecture Only
enNo
¡A veces este tipo de errores te irrita!
Eliminar datos derivados funciona para mí:
Pasos para arreglar
1) En XCODE> Windows> Proyecto> Seleccione su proyecto> Eliminar datos derivados> Salga de XCODE y vuelva a abrirlo> Si obtiene un error de compilación de MAC-O-Linker> Consulte este enlace> Limpiar y compilar nuevamente.
fuente
Tu
libnetUtils.a
se está construyendo para una arquitectura diferente a la de tu objetivo.Compruebe la configuración de compilación de libnetUtils. Las arquitecturas para las que se está construyendo y su lista de arquitecturas compatibles deben ser un superconjunto (débil) de la arquitectura de su objetivo. La complejidad aquí es que la arquitectura resultante se distribuye en varias configuraciones: "Arquitecturas", "Construir solo arquitectura activa" y "Arquitecturas válidas".
La configuración de "Construir solo arquitectura activa" hace que esto sea particularmente confuso. Por ejemplo, suponga que está construyendo para el simulador. Si la opción "Construir solo arquitectura activa" para Depurar está establecida en NO, se construirán todas las arquitecturas enumeradas en "Arquitecturas" y "Arquitecturas válidas" (probablemente armv7, etc.). Pero si libnetUtils tiene esa configuración establecida en Sí (Depurar: Sí), solo se está compilando para i386. Entonces, cuando su enlazador intenta vincular armv7 con i386, falla.
fuente
Si recibo la advertencia de ignorar archivo, me ejecutaría
lipo -info
en el archivo ignorado para encontrar su arquitectura como se muestra a continuaciónlipo -info libnetUtils.a
Eso imprimiría i386, armv6, armv7, armv7s, x86_64, etc. En general, esa arquitectura debe coincidir con la plataforma de compilación de destino. P.ej
Dependiendo de la falta de coincidencia, debe reconstruir su biblioteca para su plataforma de destino o cambiar su plataforma de destino.
Nota: Para binarios pesados,
lipo -info
imprimirá una combinación de arquitecturas anteriores.fuente
En realidad, no sé si mi consejo es correcto, pero intente verificar esto:
No me juzgues si soy capitán obvio :)
fuente
Significa que la biblioteca que está intentando usar no se compiló universalmente para el simulador de iOS (los símbolos i386 son para Mac). Sin embargo, ejecutarlo en un dispositivo real debería funcionar bien.
fuente
Tuve el mismo problema y probé diversas soluciones desde la página sin éxito. Todavía tenía un mensaje que me decía que mi biblioteca no estaba construida para arm64.
Finalmente como lo resolví:
A veces, parece que la configuración de compilación que muestra XCode está incompleta y no corresponde exactamente al archivo del proyecto.
fuente
También debe verificar si el destino de implementación dentro de la configuración de compilación es el mismo para dependientes y dependencias. Noté que tenía iOS 13 configurado para un destino de biblioteca estática, mientras que iOS 10.0 se definió para un marco que consume esa biblioteca. Cambiar ambos a 10.0 resolvió el problema.
fuente
Para mí, se fijó la configuración de
Build Active Architecture Only
toMultiple values
, para hacer eso, tienes que expandirlo y establecerDebug
toYES
yRelease
toNo
. Y ahora, se compila en mi dispositivo.fuente
Este problema no ocurrirá cuando ejecutemos la aplicación en el dispositivo. Puede verificarlo ejecutando el código en el dispositivo iOS.
fuente
También tenía una arquitectura de armv7s. Lo borré y me aseguré de que armv6 y armv7 fueran los únicos dos en la lista. Ahora funciona
fuente