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:
Alguna idea de cómo solucionar este problema?
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:
Alguna idea de cómo solucionar este problema?
Respuestas:
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?
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.
Para mí fue que importé un archivo como .m no .h por error
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
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.
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í .
Este error ocurre cuando Linker intenta vincular los archivos obj. Algunas razones en las que podría pensar para este error son:
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.
La función / clase duplicada se define accidentalmente en dos lugares / archivos diferentes del proyecto. Elimina la definición incorrecta.
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é. :)
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;
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!
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
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!
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í.
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".
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í.
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.
Para mí, creé un método llamado sampleMethod
en 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.
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.
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 ++
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