símbolos duplicados para la architecture i386 clang

He visto varias publicaciones en google y stackoverflow relacionadas con este error, las he leído todas pero aún encuentro el problema, estaré encantado de encontrar una solución. Aquí está el mensaje de error que recibo al comstackr …

directorio no encontrado para la opción ‘-L / Users / somefolder / Documents / Bharat / MyApp copy / GoogleAdMobAdsSDK’ símbolo duplicado _OBJC_CLASS _ $ _ AppDelegate en: / Users / madept / Library / Developer / Xcode / DerivedData / Alpha-dvvymdlmzseytagllsmbbrxdgutz / Build / Intermediates / Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

Gracias.

Otra razón por la que este error suele ocurrir es la importación accidental del archivo .m en lugar de .h.

Pasos:

  1. Compruebe las fases de comstackción en la configuración de destino.
  2. Verifique si existe algún archivo dos o una vez.
  3. Si el archivo existe dos veces, elimine uno. Si no, elimine el archivo en la parte inferior, que es el último.
  4. Construir de nuevo

Solo para agregar a las posibles soluciones.

En mi caso, había declarado e inicializado accidentalmente una variable en un archivo de encabezado.

Por ejemplo, esto está mal:

MyFile.h

 #import  NSInteger const ABCMyConstant = 6; 

Debería ser:

MyFile.h

 #import  NSInteger const ABCMyConstant; 

MyFile.m

 #import "MyFile.h" NSInteger const ABCMyConstant = 6; 

Vaya a Configuración de comstackción y busque No hay bloques comunes y configúrelo NO . Y comstack de nuevo, no volverás a tener este error.

Descubrí que estaba obteniendo el error cuando tuve un const declarado en un archivo .m con el mismo nombre que otro const en otro archivo .m. Ambos archivos # incluyeron el mismo archivo principal.

Acabo de experimentar esto después de volver a crear una clase modelo para Core Data. La opción del menú para crear clases de objetos creó una clase de modelo duplicada. una vez que eliminé a la víctima, el error desapareció …

Los errores del vinculador siempre muestran un problema relacionado con el uso de una biblioteca o problemas de importación.

A veces, el error ocurre cuando ha importado un archivo .m en lugar de un archivo .h.

Verifique su código y busque una statement de importación de .m en uno de sus archivos de encabezado (extensión .h), tuve un problema similar y surgieron 14 errores de símbolo duplicado.

Compruebe si ha importado ViewControler.m lugar de .h, por lo que debe ser así:

  import "ViewController.h" 

y su AppDelegate.h debería ser algo como esto:

 import "UIKit/UIKit.h" import "ViewController.h" @interface AppDelegate : UIResponder  @property (strong, nonatomic) UIWindow *window; @property (strong,nonatomic) ViewController *mainController; @end 

Recuerde siempre importar archivos de encabezado, no a .m

Si otras personas han intentado todas las demás respuestas y todavía no funciona, intente abrir el archivo .xcodeproj con su editor de texto favorito y busque el nombre de la clase que le está causando problemas. Asegúrate de cerrar Xcode antes de hacer esto. En el archivo, debe haber una línea para .h y otra línea para .m. Si hay duplicados, elimínelos, guarde el archivo y vuelva a comstackr.

Tuve este problema con un marco que sabía que funcionaba en otro proyecto. Copié los archivos del otro proyecto y los agregué a este. Luego, cuando construí, obtuve 76 errores duplicados.

La solución más simple para mí fue eliminar -ObjC de otras banderas enlazadoras. El proyecto anterior no tenía eso. Una vez que hice eso, la advertencia desapareció y el proyecto se construyó con éxito.

Obtuve este error cuando tenía una biblioteca estática incluida en el proyecto principal y también incluía una segunda biblioteca que también tenía una referencia a la biblioteca. Eso es bastante confuso, así que quizás esto sea más claro.

MyWorkspace + Main Project + Referencia a la biblioteca 1 + Referencia a la biblioteca 2 + Biblioteca 1 + Biblioteca 2 + Referencia a la biblioteca 1

Eliminé la referencia a la biblioteca 1 del proyecto principal y el error desapareció.

Otra razón puede ser que el proyecto se dirige a un simulador en lugar de a un dispositivo real al construir una versión de distribución. Eso también causa este mensaje de error.

Finalmente obtuve la solución

  1. elimine toda la referencia del SDK de AdMob, que agregué (también eliminé también del espacio de trabajo).
  2. limpia tu proyecto
  3. siga este enlace para agregar AdMob nuevamente
  4. limpiar y reconstruir

La forma más sencilla de resolver esto es que el problema Xcode 7.0 o el último simplemente no cambian los bloques comunes a NO; esto resolverá su problema. Pruebe este objective del proyecto> Configuración de comstackción> Sin bloques comunes, lo cambio a NO.

En ciertos casos, también puede obtener un error de “símbolos duplicados para la architecture …” debido al hecho de que accidentalmente declaró una constante (const) con el mismo nombre en dos archivos diferentes.

Lo tuve donde definí la misma función C dos veces. En dos archivos .m diferentes. Simplemente elimine una de las definiciones y listo.

Para mí fue diferente, copié los métodos de implementación de la clase como estaban y los iVars también se copiaron … así que en el mundo de iVars hay dos conjuntos y el comstackdor no dejaba de quejarse de duplicar ivars antes de vincular los archivos * .o .

leer la salida ayudó a eliminar todos los ivars de duplicación … gracias a la nueva función donde no necesita @sintetizar todas sus propiedades … el error desapareció …

Obtuve el mismo error al configurar OCMock. Lo arreglé agregando el libOCMock.a en la sección ‘Copiar archivos’ de Building Phase

Tuve este error después de copiar y pegar un archivo de prueba en el proyecto, olvidándome de cambiar el nombre de la interfaz y las líneas de implementación:

 @interface TDInputValidationsTests : XCTestCase 

y

 @implementation TDInputValidationsTests 

Error tonto … También sugiero mirar la pestaña “fases de construcción” en el proyecto para buscar duplicados. Eliminar los datos derivados y hacer una comstackción limpia también podría ser útil.

Importé archivos de otro proyecto, también tenía el archivo main.m. Así que, en general, tenía dos archivos main.m y eliminé uno para resolver el problema.

A veces lo creas o no, Xcode arruina el archivo del proyecto. La única solución que encontramos fue eliminar manualmente cada referencia al archivo ofensivo usando un editor de texto, luego volver a agregar los archivos en Xcode.

Nota para mí: “¡LEE EL ERROR!”

En mi caso dice esto: duplicate symbol _OBJC_CLASS_$_SATCoreData in:

Traducción: una clase Objective C llamada SATCoreData está duplicada.

Luego da la ruta a ambas ocurrencias del símbolo. La lectura de la ruta señala a los dos el archivo de clase que termina en .o . Si observas ambas clases, encontrarás algo sospechoso. En mi caso, accidentalmente había dado dos clases del mismo nombre. Una clase que tenía dentro del archivo de otra clase porque estaba probando algo y era demasiado flojo para hacer una clase por separado. Espero que esto ayude a alguien.

Tuve ese problema y estuve estancado por un tiempo. Lo que causó el problema fue que escribí algunos booleanos en el archivo .h (entre #import y @interface) y los utilicé en mi archivo .m

Simplemente los eliminé de mi archivo .h y los copié en el mismo lugar en mi archivo .m y la comstackción tuvo éxito.

Tomado de https://stackoverflow.com/a/2755581/190599

Lo que puedes hacer es poner en tu encabezado ( MyConstants.h ):

 extern const int MyConstant; extern NSString * const MyStringConstant; 

Y en un archivo fuente, incluya el encabezado arriba pero defina las constantes ( MyConstants.m ):

 const int MyConstant = 123; NSString * const MyStringConstant = @"SomeString"; 

Entonces, simplemente necesita incluir el encabezado en cualquier otro archivo fuente que use cualquiera de estas constantes. El encabezado simplemente declara que estas constantes existen en alguna parte, por lo que el comstackdor no se quejará, porque el trabajo del enlazador es resolver estos nombres constantes. El archivo fuente que contiene sus definiciones constantes se comstack, y el vinculador ve que aquí es donde están las constantes, y resuelve todas las referencias encontradas en los otros archivos fuente.

El problema al declarar y definir una constante en un encabezado (que no está declarado como static ) es que el comstackdor lo trata como un elemento global independiente para cada archivo que incluye ese encabezado. Cuando el vinculador intenta vincular todas las fonts comstackdas, se encuentra con el nombre global tantas veces como haya incluido MyConstants.h .