Símbolos duplicados para arquitectura x86_64 bajo Xcode


219

Ahora tengo la misma pregunta con el título anterior pero aún no he encontrado la respuesta correcta. Recibí el error:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Cualquier ayuda es apreciada.

Finalmente  descubro la razón de este error porque agregué -ObjCal Other Linker Flags. Después de eliminar este valor, puedo construir mi proyecto con éxito, pero no sé por qué. ¿Alguien puede explicar esto?


El enlazador ha encontrado símbolos definidos más de una vez - 75, para ser exactos. Esto probablemente se deba a que #include'd' o #import'd algo (probablemente el MoboSDK, sea lo que sea) más de una vez.
ravron

este error ocurre después de agregarlo GoogleConversionTrackingSDK-iOS-3.0a mi proyecto. Antes de eso, funciona bien. También intenté eliminarlo, pero el error aún ocurre.
Lee

No es su caso, porque antes de agregar el SDK de Google, mi proyecto está bien.
Lee

La segunda respuesta de Adam Waite es realmente sencilla. Asegúrese de que no haya un archivo .m # importado en alguna parte.
Bogdan

En mi caso, estaba tratando de usar el mismo nombre de matriz de cadenas en dos clases separadas. Cuando he cambiado el nombre de la matriz en una de las clases, este error se ha eliminado.
Esperanza

Respuestas:


109

75 símbolos duplicados para arquitectura x86_64

Significa que ha cargado las mismas funciones dos veces. A medida que el problema desaparecerá después de la eliminación -ObjCde Other Linker Flags, este medio que este resultado opción que funciona cargas dos veces:

de preguntas y respuestas técnicas

Este indicador hace que el vinculador cargue cada archivo de objeto en la biblioteca que define una clase o categoría de Objective-C. Si bien esta opción generalmente dará como resultado un ejecutable más grande (debido al código de objeto adicional cargado en la aplicación), permitirá la creación exitosa de bibliotecas estáticas efectivas de Objective-C que contienen categorías en las clases existentes.

https://developer.apple.com/library/content/qa/qa1490/_index.html


1
En otras palabras, asegúrese de eliminar cualquier archivo de objeto en su proyecto xcode.
Hipotético en la clavícula el

55
También funciona para mí, pero mis otras bibliotecas dependen de la -ObjCbandera. Por lo tanto, debo mantener esta bandera en la configuración de mi proyecto. Entonces, ¿podría sugerir alguna otra solución?
Sunil Targe

3
Supongo que debe revisar todas sus bibliotecas: si obtiene un error de vinculador duplicado, eso significa que tiene el mismo código fuente en 2 o más bibliotecas.
David V

Tuve que eliminar algunas de las bibliotecas de React de las que se quejaba en Target-> Build Phases-> Link Binary With Libraries en Xcode ya que estaba en conflicto con la instalación de React
Coty Embry en

En mi caso tengo el archivo de importación .m. Tan estúpido error. Una vez que importé el archivo .h. ¡Está listo para construir! Gracias
Ravi

261

Para mí, cambiar 'Sin bloques comunes' de Sí a No (en Objetivos-> Configuración de compilación-> Apple LLVM - Generación de código) solucionó el problema.


3
Esto resolvió mi problema. ¿Alguna vez es necesario volver a cambiarlo NO? ¿Cuál es la razón detrás de esto?
Hemang

3
Sí, esto resuelve el problema, pero no la razón detrás de él. Si definió una constante, asegúrese de que la definición esté bien. En mi caso, simplemente olvidé "externo". Esto se menciona en la respuesta de Sauvik Dolui.
coco

10
Xcode 8 provocó este cambio como una de sus actualizaciones automáticas y rompió mi compilación: /
pkamb

1
Después de pasar 2 horas, este problema se ha resuelto debido a esta respuesta. Gracias
Manish Pathak

1
Esto funciona, pero tuve que cambiarlo en objetivo y proyecto
Nooblhu

251

Estúpido, pero asegúrate de no haber #importeditado un .marchivo por error en alguna parte


3
No había hecho esto, pero esta solución me ayudó a encontrar lo que había hecho, que fue declarar una variable fuera del bloque @interface en un archivo .h por error.
Scooter

Cuando se utilizan pruebas unitarias, solo se genera el archivo .m. Creé un archivo de encabezado para él a pesar de que supongo que esta no es la mejor solución: quería crear una clase de prueba base.
Bruno Muniz el

Muchas gracias por iluminar mi mente por la posibilidad de haber cometido un error tan estúpido.
Daniel Lima

¿qué tal el archivo .m de importación de proyectos cruzados?
noviembre

54

En mi caso, acabo de crear un archivo de encabezado para definir cadenas constantes como esta:

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

Resolví este escenario usando static:

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

2
Esto resolvió el problema para mí. Aunque el prefijo i externen lugar de static: extern NSString * const kNotificationName;. Lo cual es extraño, porque u generalmente no añadió tales prefijo, y funcionó bien ..
user1244109

Esto, por alguna razón, resolvió mi problema. Gracias. No entiendo por qué el compilador no pudo dar una mejor respuesta que los símbolos duplicados, que no parecen estar relacionados en absoluto.
Sirenas

@Sirens, también esperaba un mejor mensaje de error del compilador LLVM. De todos modos, tuve la suerte de descubrir el error después de 2 días. :(
Sauvik Dolui

este también fue mi problema, ¿por qué el problema real es causado por esto?
Fatlad

Esto está bien si todas las variables en AppStrings.hson constantes, sin embargo, causará havok si desea una variable mutable global ya que cada archivo fuente que incluye el archivo de encabezado tendrá su propia copia de la variable. Es una mala solución.
trojanfoe

32

Encontré que la respuesta aceptada toca el problema, pero no me ayudó a resolverlo, espero que esta respuesta ayude con este problema muy frustrante.

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"Significa que ha cargado las mismas funciones dos veces. A medida que el problema desaparece después de eliminar -ObjC de otros indicadores de vinculador, esto significa que esta opción da como resultado que las funciones se carguen dos veces:"

En términos simples, esto significa que tenemos dos archivos en nuestro proyecto con exactamente el mismo nombre. ¿Quizás estás combinando un proyecto en otro? Eche un vistazo a los errores sobre el error "símbolos duplicados" para ver qué carpeta está duplicada, en mi caso fue BLoginViewController.

Por ejemplo, en la imagen a continuación puede ver que tengo dos BImageViewControllers, para mí esto es lo que estaba causando el problema.

Tan pronto como eliminé uno, el problema desapareció :)

ingrese la descripción de la imagen aquí


2
Enorme ayuda, gracias. He tomado una copia de seguridad de un proyecto que utiliza cocoapods. Al olvidar que necesitaba abrir el espacio de trabajo cuando volví a cargar la copia de seguridad en Xcode y descubrí que no se podía construir, agregué AFNetworking directamente al proyecto. Posteriormente volví a configurar mis cocoapods, que incluían AFNetworking como una dependencia y olvidé eliminar la carpeta original de AFNetworking que había agregado a mi proyecto.
JanB

32

Yo tengo el mismo problema. En Xcode 7.2 en la ruta Objetivo del proyecto> Configuración de compilación> Sin bloques comunes, lo cambio a NO.


44
Este fue mi problema. Era una configuración que Xcode 8 había puesto. ¡Gracias!
Robert J. Clegg

30

Ocurre también cuando declaras variables constantes con el mismo nombre en diferentes clases:

en el archivo Mensaje.m

const int kMessageLength = 36;

@implementation Message

@end

en el archivo Chat.m

const int kMessageLength = 20;

@implementation Chat

@end

1
No constante pero funcionó para mí cuando cambio el nombre de la variable
Oktay

Tuve esto con un puntero de mi propia variable de clase definida en la implementación de dos clases diferentes
ammianus

En el momento de la compilación, el compilador busca símbolos duplicados (aquí variables globales) solo en los archivos de encabezado (.h). Pero al momento de la vinculación, las variables (globales) en los archivos de implementación (.m) también se verifican y, si hay algún duplicado, Linker lo hará por error: símbolo duplicado _xyz
PANKAJ VERMA

30

Esto ocurrió cuando acepté la ventana emergente "configuración recomendada" en un proyecto que desarrollé hace dos años en Objective-C.

El problema fue que cuando aceptó la actualización de "configuración recomendada", Xcode cambió automáticamente o agregó algunas configuraciones de compilación, incluidas GCC_NO_COMMON_BLOCKS = YES;.

Esto hizo que la compilación fallara con el duplicate symbolerror en mi proyecto actualizado. Así que cambié No Common Blocka NOmi configuración de compilación y el error desapareció.


3
Sí, esto me ayudó. Xcode 8, actualizó un proyecto anterior a la configuración recomendada. Cambié esto y estoy listo para volver. ¡Gracias!
Zoltán

2
Buen trabajo. ¡Me ayudo mucho! ¡Un voto positivo por ti, cariño! ;-)
Helen Wood

1
Mate brillante :)
Burf2000

16

La forma más rápida de encontrar el duplicado es:

  1. Ir a objetivos
  2. Ir a construir fases
  3. Ir a fuentes de compilación
  4. Eliminar archivos duplicados.

Omg, este fue mi caso, muchas gracias! Ahora te debo 4 horas de mi vida y algo de cerveza :)
Miroslav

1
de nada, pero no, gracias, no bebo :) feliz codificación.
J. Goce

Agregue un par de horas más a eso.
CJ_COIMBRA

¡Trabajó para mi! ¡Gracias!
olor a

15

Los siguientes pasos me resolvieron el problema.

  1. Vaya a Fases de construcción en la configuración de destino.
  2. Vaya a "Enlace binario con bibliotecas".
  3. Compruebe si alguna de las bibliotecas existe dos veces.
  4. Construir de nuevo.

13

Elimine -ObjC de otros indicadores de vinculador o compruebe que importó cualquier archivo .m en lugar de .h por error.


1
Hola a todos, que todavía se preguntan por qué la bandera de ObjC no funciona, presten atención a esta respuesta. Estaba completamente equivocado al pensar que la bandera de ObjC no funciona en mi caso "súper especial". Después de buscar algo en el proyecto como .m"he notado que importé el archivo .m en lugar de .h y después de arreglarlo, ¡simplemente funcionó! Talk is cheap, show me the code!¡Salud!
bgplaya

9

Mi situación con algún proyecto heredado abierto en Xcode 7.3 fue:

duplicate symbol _SomeEnumState in:

seguido con una lista de dos archivos no relacionados. luego, esto se repitió un par de veces y finalmente:

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Lo que me resolvió fue cambiar la declaración de enumeración de:

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

a esto:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

Si alguien tiene una explicación para esto, por favor, ilumíneme.


Lo mismo me solucionó, cuando cambié enum a typedef NS_ENUM solucionó el error de símbolos duplicados
Mark24x7

9

Definir la misma variable bajo @implementation en más de una clase también puede causar este problema.


¿pero por qué? me pasó lo mismo con las funciones simples de C con los mismos nombres
vib

9

En mi caso, había dos archivos con el mismo nombre en la ubicación

Objetivos> Fases de compilación> Compilar fuentes y eliminar cualquier archivo duplicado.


8
  • Ir a objetivos
  • Seleccionar configuración de compilación
  • Busque "No hay bloques comunes" , selecciónelo en NO .

Funciono para mi


7

Experimenté este problema después de instalar Cocoapods. Ahora ocurre cada vez que actualizo algunos pods. Solución que he encontrado:

Ir a la terminal:

1) pod deintegrate
2) pod install

Además, verifique el elemento "Incrustar siempre bibliotecas rápidas" en su Configuración de compilación. Debe estar "desvanecido", lo que indica que está utilizando la configuración predeterminada. Si se establece en un SÍ manual, presione eliminar sobre él para revertirlo a la configuración predeterminada. Esto detuvo el comportamiento.


Esto funcionó para mí. Sin embargo, "Insertar siempre bibliotecas rápidas" ya estaba establecido en NO. Lo cambié a SÍ y luego presioné eliminar y luego ejecuté las funciones de pod indicadas anteriormente.
BVB09

5

Para mí, durante la configuración de proyecto recomendada por Xcode8, actualice "Sin bloques comunes" a SÍ, lo que causa este problema.


Lo mismo para Xcode8.2.1, cuando se aplica a un proyecto antiguo.
onekiloparsec

Esto también lo solucionó en XCode
11.3.1

5

Hoy recibí el mismo error. La palabra clave del error es duplicate. Lo arreglo por:

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

eliminar referencia

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear

¡Gracias! En mi caso compilé dos main.m donde uno era la referencia anterior. Esto fue causado por arrastrar y soltar.
tong

4

Asegúrese de no haber importado un archivo .m por accidente, es posible que desee eliminar sus datos derivados en la Ventana de Proyectos y luego compilar y ejecutar nuevamente.


4

Para cualquier otra persona que tenga este problema, no vi mi resolución en ninguna de estas respuestas.

Después de tener un conflicto de fusión .pbxproj que se abordó manualmente (aunque de manera deficiente), hubo referencias duplicadas a archivos de clase individuales en .pbxproj. Eliminarlos del Proyecto> Fases de compilación> Compilar orígenes me arregló todo.

Espero que esto ayude a alguien en el futuro.


También tenía conflictos de fusión y tenía que resolverlos manualmente en el archivo pbxproj. Terminé con ld: X duplicate symbols for architecture x86_64. Se solucionó eliminando los archivos de origen mencionados en el mensaje de error y volviéndolos a agregar al proyecto.
kas-kad

4

Similar a Juice007, había declarado e inicializado una variable de tipo C en dos archivos .m diferentes (¡que no fueron importados!)

BOOL myVar = NO;

sin embargo, este método de declarar e inicializar una variable, incluso en .m, incluso en @implementation, le otorga un alcance global. Sus opciones son:

  1. Declararlo como estático, para limitar el alcance a la clase:

    static BOOL myVar = NO;
  2. Elimine la inicialización (lo que hará que las dos clases compartan la var global):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
  3. Declararlo como una propiedad:

    @property BOOL myVar;
  4. Declararlo como un iVar apropiado en la interfaz @

    @interface myClass(){
        BOOL myVar;
    }
    @end

4

En mi caso, tenía dos main()métodos definidos en mi proyecto y eliminar uno resolvió el problema.


Tuve el mismo problema aquí. Tu publicación me ayudó. ¡Gracias!
Baran Emre

3

Recientemente tuve un dolor de cabeza buscando la fuente de un error. Me sorprendí cuando descubrí que mi aplicación no quería compilar, simplemente porque tenía el siguiente fragmento de código en diferentes clases:

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

Espero que pueda ayudar a alguien.


pequeña función auxiliar, copiada accidentalmente, fácilmente pasada por alto, ¡gracias!
Steven A. Lowe

3

Espero que definitivamente te ayude

Tengo el mismo error 3 símbolos duplicados para la arquitectura x86_64

En mi caso, he copiado el código de otro archivo del mismo proyecto, por ejemplo. código del archivo Am a Bm y después de la compilación recibí un error como mención. y he resuelto el error cambiando el nombre de la variable global.

Este error se produjo en mi caso debido a la misma declaración para la variable global en ambos archivos.


3

Obtuve el mismo error cuando agregué un repositorio de pod

pod 'SWRevealViewController'

para un código fuente ya agregado (SWRevealViewController) de gitHub. Por lo tanto, el error se solucionará eliminando el código fuente o el repositorio de pod.

Caso # 2:

La segunda vez, este error apareció cuando declaro una constante en el archivo .h .

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...

El segundo caso me salvó una noche. ¡Gracias!
Pankaj Yadav

3

Las respuestas anteriores no funcionaron para mí. Así es como lo evité:

1) en el buscador, elimine toda la carpeta Pods y el archivo Podfile.lock 2) cierre el proyecto xcode 3) ejecute pod install en el terminal 4) abra el proyecto xcode, ejecute el comando clean build

Trabajó para mí después de eso.


2

El mismo problema ocurrió conmigo cuando estaba integrando el proyecto lob dentro de mi proyecto.

ingrese la descripción de la imagen aquí

En realidad, el proyecto lob también tiene los archivos AFNetworking, por lo que elimino los archivos .m del proyecto lob.

ingrese la descripción de la imagen aquí

En realidad, los archivos .m están en conflicto con los archivos My project POd / AFNetworking / .m

ingrese la descripción de la imagen aquí


2

En Xcode 6.3.2. He verificado todas las posibilidades como se indica a continuación

1: No he importado el archivo .m en mi proyecto.

2: eliminado -ObjCde otro indicador de enlazador .

3: Eliminé todos mis datos derivados .

Todavía recibo el mismo error. He eliminado este error al eliminar cualquier declaración de variable del .pcharchivo . En mi caso, he declarado AppDelegateobjeto en el .pcharchivo. Finalmente encontré una razón que causa un error. así que elimino la declaración de cualquier variable del archivo .pch y el encanto de trabajo de mi proyecto.


2

Otro error tonto que causará este error son los archivos repetidos. Accidentalmente copié algunos archivos dos veces. Primero fui a Objetivos -> Fases de construcción -> Compilar fuentes. Allí noté dos archivos en esa lista dos veces y sus ubicaciones.


No sé por qué alguien te rechazó, esto resolvió mi problema.
Yawar,

2

También tengo este error hoy. Eso es porque definí un valor constante en un .marchivo. Pero definí otro .marchivo que también incluía este valor constante. Eso significa que tiene dos mismos valores constantes. Entonces aparece este error. Y mi solución es agregar una palabra clave " static" antes del valor constante. Como:

static CGFloat const btnConunt = 9;

Y luego construyo el proyecto, no informará este error.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.