Símbolos duplicados para arquitectura arm64

103

Cuando intento ejecutar mi proyecto Xcode, falla con un error que indica que tengo símbolos duplicados. Busqué en línea dónde encontrar estos duplicados pero no tuve suerte:

ingrese la descripción de la imagen aquí

Alguna idea de cómo solucionar este problema?

picciano
fuente
1
significa que tienes demasiado de BFAppLinkReturnToRefererView
Andrey Chernukha
Además, es posible que desee limpiar un poco su proyecto en lugar de vincularlo a marcos que se encuentran en su escritorio. :)
picciano
En mi caso, agregué extern NSString * const tColor; en archivo .h y NSString const * tColor = @ "# 000022"; en dos clases .m diferentes.
ios_dev
Puede encontrar lo que busca aquí stackoverflow.com/a/46678210/988941
MoOx

Respuestas:

65

A partir de los errores, parecería que FacebookSDK.framework ya incluye las clases Bolts.framework. Intente eliminar los Bolts.framework adicionales del proyecto.

picciano
fuente
22
¿cómo? ¿Puedes guiarme paso a paso?
Imdad Ali
68

Para mí, ayudó a cambiar la configuración del compilador "Sin bloques comunes" a NO: parece tener sentido, la configuración se explica aquí: ¿Para qué se usa GCC_NO_COMMON_BLOCKS?

tania_S
fuente
¡Tu eres el hombre! Acabo de hacer un nuevo proyecto de xCode 7.3.1 y la configuración predeterminada es SÍ :(
Yaro
4
Esta opción fue activada para mí por la ventana "Actualizar proyecto a la configuración recomendada" de Xcode.
commscheck
Eres el mejor
showmyroutes
consejo invaluable, ¡pero doh no ayudó en mi caso! : O
Fattie
49

Usando Xcode 8, la opción "Actualizar proyecto a la configuración recomendada" activó "Sin bloques comunes" para mi proyecto.

Volviéndolo a APAGADO arregló todo.

Adam G
fuente
2
Actualizar el proyecto a la configuración recomendada, ¿cómo lo hago? me refiero a que menú?
Sazzad Hissain Khan
@SazzadHissainKhan Está en tu configuración de compilación.
Viaje
21

Para mí fue que importé un archivo como .m no .h por error

Jason Silver
fuente
Eso es LOL, pero cierto; D
Vladimir
esto me acaba de pasar ... culpo a la finalización del código por todo
user426132
21

He estropeado mis pods al degradar un pod y he logrado resolver el problema con símbolos duplicados para la arquitectura arm64 quitando los pods e instalándolos nuevamente con:

pod deintegrate
pod install
Matea
fuente
Estaba usando el SDK de Google Places, integrado a través de CocoPods - 3.9.0, y esta respuesta solucionó mi problema.
andrewlundy
11

Otra solución es:

Seleccione Proyecto -> Destino -> Fase de compilación -> Compilar fuente -> busque el archivo que se menciona en la tercera última línea de error (en su caso BFAppLinkReturnToRefererView.o ).

Luego verá 1 o 2 archivos en el resultado de la búsqueda.

Elimina uno de ellos y vuelve a compilar . Debería volver a compilar ahora porque solo queda un archivo y no hay más conflictos para la compilación.

Si eso no funciona, es probable que el archivo tenga errores y debería eliminarlos todos y volver a compilarlos. Debería funcionar de nuevo.


fuente
2
Respuesta extremadamente subestimada, ¡gracias por tu ayuda, Lukas! :)
patreu22
No hay problema, me alegro de que resolvió su problema :)
10

Al actualizar a Xcode 8, recibí un mensaje para actualizar a la configuración recomendada. Acepté y todo se actualizó. Empecé a tener un problema de tiempo de compilación:

Símbolo duplicado para XXXX Símbolo duplicado para XXXX Símbolo duplicado para XXXX

Un total de 143 errores. Fue a Target-> Build settings -> No Common Blocks -> Configúrelo en NO. Esto resolvió el problema. El problema era que los proyectos integrados tenían bloques de código en común y, por lo tanto, no se podía compilar. La explicación se puede encontrar aquí .

2 revoluciones
fuente
9

Este error ocurre cuando Linker intenta vincular los archivos obj. Algunas razones en las que podría pensar para este error son:

  1. La función / clase duplicada se define en dos lugares / archivos diferentes en el proyecto y se suponía que solo uno de ellos se compilaría para cualquier variación del comando de compilación. Pero de alguna manera ambos archivos se compilaron en su proyecto. Por lo tanto, debe verificar sus condiciones if-else u otras dependencias que agregan archivos src a la lista de archivos necesarios para compilar y eliminar el archivo no necesario para su comando de compilación particular.

  2. La función / clase duplicada se define accidentalmente en dos lugares / archivos diferentes del proyecto. Elimina la definición incorrecta.

  3. Limpie su directorio OBJ antes de volver a compilar, podría haber algunos archivos obj antiguos de sus compilaciones anteriores que podrían estar causando este conflicto.

PD: no soy un experto, pero así es como resolví este problema cuando lo enfrenté. :)

ManyuBishnoi
fuente
9

Si se está moviendo a Xcode 7 u 8 y está abriendo un proyecto realmente antiguo, me he encontrado con este problema:

en SomeConstFile.h

NSString * const kAConstant;

en SomeConstFile.m

NSString *const kAConstant = @"a constant";

Las versiones anteriores del compilador asumían que la definición en el archivo de encabezado era externa, por lo que incluir SomeConstFile.h por todas partes estaba bien.

Ahora necesita declarar explícitamente estos consts como extern:

en SomeConstFile.h

extern NSString * const kAConstant;
Dan Loughney
fuente
1
¡Gracias por esto! Estaba luchando con un problema con un archivo constants.h que estaba creando lol
Sung Min Kim
1
Gracias por la respuesta Yo también estaba enfrentando el mismo problema y su respuesta funcionó para mí ...
reetu
1
Gracias, estuve luchando por este problema durante las últimas 3-4 horas
Sumit Kumar Saha
9

Debajo del parche funciona para mí .. :)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

¡Regresarlo a NO resolvió el problema!

Saumil Shah
fuente
2
Paso 2: resolvió mi problema. Gracias :)
Dorald
2

Bueno, algunas veces cuando se usa SDK como FB o bibliotecas como Vuforia o GoogleAnalytics, agregar proyectos de muestra puede causar el problema de que ya incluyen Frameworks y así, por lo que debe asegurarse de no repetir los símbolos que agrega manualmente mientras ya están incluido en muestras

IsPha
fuente
2

Para mí, el problema fue el estilo de creación de const, que funcionó bien hasta este iOS8 ... tenía algunas líneas como:

int const kView_LayoutCount = 3;

en mi archivo .h. Seis líneas como resultaron en 636 archivos enlazadores una vez que los bloques comunes se establecieron en NO. (14k + si la respuesta es SÍ). Se movieron las líneas a .m después de quitar .h de la declaración de valor y la compilación estuvo lista para comenzar.

¡Espero que esto ayude a otros!

dibujó..
fuente
2

En mi caso, la razón fue demasiado estúpida:

Tenía un archivo Constant.h donde tenía macros definidas. Pensé en hacer NSString allí. e hizo esto:

NSString const *kGreenColor = @"#00C34E";

esto causó el problema de los símbolos duplicados para la arquitectura arm64 y el comando del vinculador falló con el código de salida 1. Eliminar la línea const NSString funcionó para mí.


fuente
2

verifique su archivo de inclusión, tuve este problema porque accidentalmente # importé "filename.m" en lugar de "filename.h", autocorrección (tab) puse una "m" y no una "h".

Mike Zriel
fuente
Muchas gracias, no me di cuenta de que había cometido este error, estaba ocupando todo mi tiempo. Gracias de nuevo 👍
Supertecnoboff
1

A partir de los errores, parecería que las Clases aparecen varias veces. Busque y elimine las Clases que funcionarán.

Estoy creando el archivo AppDelegate.hy .m creando varias veces. Entonces este error ocurrirá Finalmente, encuentre y elimine las clases que funcionan bien para mí.

Karthickkck
fuente
1

para resolver este problema, vaya a las fases de compilación y busque archivos duplicados como (facebookSDK, unityads) y elimine (extensión file.o) y luego compile nuevamente.

Mahmoud abualamrien
fuente
0

Para mí, creé un método llamado sampleMethoden ViewController_A y también creé el mismo método en ViewController_B, me causó este error, luego cambié el nombre del método en ViewController_B a secondSampleMethod. Solucionó el error.

Parece una buena característica para reducir el código y no duplicar el mismo código en muchos lugares.

Intenté cambiar los bloques No Common de Sí a No y luego habilitar la capacidad de prueba de Sí a No. No funcionó. Revisé los archivos duplicados también en las fases de compilación, pero no hay archivos duplicados.

R. Mohan
fuente
0

Obtuve este problema porque estaba definiendo perezosamente una variable en mi .m fuera de un método, luego en otro archivo .m estaba definiendo otra variable con el mismo nombre fuera de un método. Esto estaba provocando un problema de duplicación de nombre de variable global.

Albert Renshaw
fuente
0

El problema para mí fue que había incluido manualmente un marco, pero luego también incluí ese mismo marco en CocoaPods sin saber que lo hice. Una vez que eliminé uno u otro, el problema desapareció

MobileMon
fuente
0

Pude resolver este error que decía "158 símbolos duplicados para la arquitectura armv7, 158 símbolos duplicados para la arquitectura arm64" --- Si esto es lo que está obteniendo también, significa que está intentando compilar un archivo que está importando o heredar un marco o biblioteca estática que tiene referencias a código o archivos C ++. Una manera fácil de manejar esto sería cambiar la extensión de su archivo .m a .mm. Así es como se maneja si está usando Objective C, aunque no estoy seguro de Swift.

También en la configuración de su compilación, puede actualizar las "otras banderas del vinculador" a -lc ++

Manish Gupta
fuente
0

Si alguien está experimentando esto trabajando en Flutter, no intentes desintegrar pod, pod init.

Cómo lo resolví es ejecutar flutter clean, flutter run -d [Dispositivo iOS]

Hope puede ayudar a alguien.

Dx_
fuente
0

Por favor cambie la configuración.

Paso 1: Vaya a OBJETIVOS -> Configuración de compilación -> Sin bloques comunes -> No

Paso 2: Vaya a TARGETS -> Build Settings -> enable testability -> No

Dnyaneshwar Shinde
fuente