El comando del vinculador falló con el código de salida 1 (use -v para ver la invocación), Xcode 8, Swift 3

114

¡No puedo deshacerme de este error!

He intentado todo tipo de cosas, como borrar Datos Derivados (Preferencias-> Ubicaciones-> hacer clic en la flecha gris para abrir la carpeta Datos Derivados en Finder-> hacer clic derecho, mover a la papelera), limpiar el proyecto (CMD + Shift + K o Producto -> Limpiar), actualizando carthage y dependencias, verificó otras respuestas en StackOverflow (principalmente ajustes en Build Settings / Phases) y reclonó la aplicación desde github, etc.

El mismo proyecto funciona en las computadoras de mis colaboradores.

EDITAR: A partir de la respuesta actual mejor calificada, pude depurar un poco más ... Sin embargo, todavía no estoy seguro de cómo solucionarlo. ¿Parece que tengo algo en el proyecto dos veces? ¡Miré y no encontré nada apareciendo dos veces!

Aquí hay una imagen del registro:

Jake Dobson
fuente
¿Por qué aceptó la respuesta mejor calificada si no resolvió su problema ...?
benomatis

Respuestas:

160

Hoy me enfrentaba al mismo problema en xcode 8 versión 8.3.2

haga clic con el botón derecho en el problema -> revelar en el registro

ingrese la descripción de la imagen aquí

entonces puede verificar qué está causando ese problema

ingrese la descripción de la imagen aquí

umairqureshi_6
fuente
¡Gracias por eso! Esto es lo que obtengo en el registro: imgur.com/vFkNJzZ
Jake Dobson
Finalmente resolví esto. ¡Me ayudaste a guiarme en la dirección correcta! Realmente apestaba que Xcode no revelara el registro al hacer clic en ... ¡Podría haberme ahorrado algo de tiempo!
Jake Dobson
Gracias por la sugerencia Revelar en registro. No sabía que podía usarlo
KarenAnne
1
@GhasemTabatabaei Verifique mi respuesta a continuación
Jake Dobson
81
¿Por qué es esta la respuesta aceptada? En realidad, no responde a la pregunta, solo ayuda potencialmente a llegar a la solución.
Tom Oakley
116

Tal vez instaló un archivo de pod y todavía está intentando compilar a partir del .xcodeprojarchivo en lugar de.xcworkspace

Aashish
fuente
4
No, utilicé Carthage por esa razón. Sin embargo, esa es una respuesta legítima que podría ayudar a otras personas con este mismo error.
Jake Dobson
1
Agregué el código m $ AppCenter a un proyecto existente y necesitaba Pods. No tenía idea de lo que estaba pasando y lo había estado haciendo con el .xcodeprojdurante más de un año ... ¡Algo así de simple!
Dennis Smolek
1
Mi solución estaba algo relacionada con esto. Recientemente había actualizado algunas dependencias y el proyecto ahora usaba CocoaPods. Anteriormente, siempre estaba trabajando desde el archivo del proyecto. Abrí el archivo del espacio de trabajo, que tenía mi proyecto y Pods, y todo funcionó bien.
Rozgonyi
40

lo único que funcionó para mí fue correr pod deintegrateypod install

Charles Harring
fuente
La pregunta ha sido respondida. Si ve mi comentario a continuación, había importado un archivo que ya se había importado a ese archivo. El proyecto estaba en una condición de carrera al intentar hacer referencia al archivo dos veces.
Jake Dobson
ok, sí, pero no funcionó para mí y cuando lo busqué en Google, esto es lo que surgió, así que pensé en intentar ayudar a alguien más ... soy nuevo en esto, ¿debo eliminar mi respuesta?
Charles Harring
Supongo que no, ya que ya está ahí. Estoy seguro de que a alguien le resultará útil. La aplicación que estaba usando no usaba cocoapods. El caso es que este error es muy común y da poca información sobre sí mismo. Se pueden encontrar tantas soluciones, dependiendo de cada proyecto.
Jake Dobson
¡Me salva el día! ¡Dios te bendiga!
user2612604
19

¿Intentaste una limpieza? cmd + shift + k

Francisco perez
fuente
8
¡Oh, sí ... muchas veces!
Jake Dobson
Eso es, literalmente, todo lo que obtengo ... Hacer clic en el texto no me envía a ninguna información adicional o la ubicación del archivo donde sucedió, como ocurre con la mayoría de los errores. Nada en la consola, nunca llega a ejecutar la aplicación debido a este error ..
Jake Dobson
FWIW, encontré este problema recientemente al compilar con un SDK y la sugerencia de @ FranciscoPerez funcionó. Definitivamente lo recomiendo como primer paso antes de profundizar demasiado en la depuración.
riastrad
9

Bien ... Así que esto es lo que resolvió mi problema ...

en el archivo delegado de la aplicación:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

Ya había importado Credentials.h en el archivo DarkSkyAPI.m en mi proyecto. ¡Al comentar la importación adicional, el error desapareció!

Algunas cosas para mencionar y tal vez ayudar a alguien en el futuro. La respuesta de @ umairqureshi_6 me ayudó en el proceso, pero no lo resolvió. Me llevó a donde pude buscar la información. Seguí viendo los archivos AppDelegate y DarkSkyAPI apareciendo en el registro de errores y la información que estaba extrayendo del archivo Credentials estaba causando el error. Sabía que tenía que estar en uno de estos 3 archivos, así que inmediatamente verifiqué las importaciones, porque recordé haber escuchado que el .h lleva todas las importaciones de su archivo .m. ¡Auge!

Jake Dobson
fuente
6

Sé que la pregunta ya ha sido respondida. Pero si esto ayuda a alguien a ahorrar algo de tiempo: tuve el mismo error. Revisé todo para encontrar un error muy pequeño y estúpido de mi parte. Importé un archivo personalizado ManagedObject de datos centrales en un controlador de vista de mi proyecto. Importé accidentalmente el archivo .m en lugar del archivo .h que estaba causando el símbolo duplicado en el error de arquitectura (el comando del vinculador falló) porque mi archivo .m de la clase de propiedades importa el archivo .h de la clase de datos principales y, por lo tanto, causa una importación duplicada.

¡Así que compruebe si ha importado los archivos correctos antes de probar varias soluciones!

Priyanka
fuente
¡Si! Esto fue muy similar a mi problema. Tuve el mismo archivo importado dos veces en mi proyecto. Más bien, importé un "fileA.h" a "fileB.h", pero luego importé "fileA.h" y "fileB.h" a "fileC.h", o algo por el estilo ... Así que la aplicación se bloquea porque no sabe cuál usar. ¡Definitivamente un buen lugar para tener un recordatorio para que otros verifiquen sus importaciones de archivos!
Jake Dobson
6

Arriba se mencionan muchas soluciones. Nadie trabajó para mí (pero primero intente arriba).

Seleccione Proyecto -> Seleccionar destino -> Marco y bibliotecas vinculados -> Agregar todas las bibliotecas de pod. (eliminar si existen en binarios incrustados)

Ahora elimínelos de la carpeta Framework en el explorador de archivos izquierdo de xcode.

Esto resolvió mi problema.

Aaban Tariq Murtaza
fuente
4

Seleccione el proyecto-> Fase de compilación-> Vincular binario con bibliotecas y agregue todas las bibliotecas de pod.

K Prasad
fuente
3

Tuve el mismo problema al usar Carthage para las dependencias.

Simplemente vaya a Seleccionar proyecto -> Configuración de compilación -> Buscar habilitar código de bits -> Si está seleccionado en Sí, seleccione No.

Eso me resolvió este problema.

Adri Silva
fuente
2

Tuve el mismo problema.

La causa fue que declaré la misma variable global en 2 archivos . Entonces mostraba el mismo error diciendo 2 símbolos duplicados .

La solución fue eliminar esas variables.

Ajit A. Kenjale
fuente
1
¿Por qué eliminó ambos y no solo uno?
Jake Dobson
2

Para cualquiera que tenga este problema con el marco Flurry. Esto es lo que solucionó mi problema. Para mí, el problema era que había importado los siguientes archivos pero nunca los usé. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Así que todo lo que tuve que hacer fue ir a la configuración de destino del proyecto y eliminar estos 2 archivos de la sección "Marco vinculado y bibliotecas" y el problema se resolvió.

Cedan Misquith
fuente
2

En mi caso, el motivo del error es la biblioteca que se vinculó dos veces.

Lo uso react-nativepara que se vincule automáticamente usando react-native linky manualmente en xcode.

Stanislav Mayorov
fuente
2

Asegúrese de que la Find Implicit Dependenciescasilla de verificación esté marcada.

(Producto -> Esquema -> Editar esquema -> Generar -> Buscar dependencias implícitas)

llama591
fuente
2

Estaba probando el marco Sparkle con CocoaPods.

Lamentablemente, puse pod 'Sparkle', '~> 1.21'PodFile en el lugar equivocado. Lo puse debajo de Pruebas (para pruebas unitarias).

Una vez colocado en el lugar correcto en PodFile, todo está bien.

pdq
fuente
1

¡Solo tenía que hacer import Foundation!

¡Estaba usando Kitura para el lado del servidor Swift y seguía olvidándome de esto!

Miel
fuente
Decir ah. Sí, ¡siempre necesitará al menos importar Foundation antes de hacer cualquier cosa! Por lo general, importo UIKit en lugar de Foundation, porque casi siempre necesitaré usar características de UIKit y UIKit hereda todo de Foundation para ti. Las importaciones con Objc pueden ser bastante complicadas, pero ¿parece que estabas usando Swift?
Jake Dobson
Sí, estaba usando Swift, el archivo en cuestión no mostraba ningún problema con el compilador, pero solo durante la ejecución del archivo, ¡encontré este problema!
Miel
1
Sí, no creo que realmente compruebe eso hasta el tiempo de ejecución, podría estar equivocado. Pero, parece que no tendría ningún problema hasta que intentara acceder a algo de Foundation, no pudo encontrar la importación y luego no pudo continuar el proceso: ¡falla!
Jake Dobson
1

Aquí está mi problema y solución:

Eliminé dos archivos del código fuente usando el árbol de fuentes (controlador de versión). Después de aplicar el diff, que contiene las dos clases que eliminé, Xcode no lo agregó automáticamente. Entonces obtuve un error de vinculador.

Agregué manualmente los archivos, haciendo clic derecho en el nombre del grupo y seleccione "Agregar archivos a". Ahora mi error se resolvió.

Si alguien se enfrentó al error del vinculador con respecto al archivo de clase, intente agregarlo manualmente.

Sujananth
fuente
1
Definitivamente parece un problema de archivo que están tratando de insinuar ... Los archivos de otros lugares que no recuperan información entre sí parecen encontrarse comúnmente en esta página. Gracias por su respuesta. ¡Espero que ayude a alguien en el futuro!
Jake Dobson
1

No tuve este problema cuando construí y ejecuté mi propio dispositivo. Solo tuve este problema con los simuladores. Simplemente reinicié mi computadora y la ejecuté. Funcionó.

therealManUtdFan
fuente
1

En mi caso, he cambiado el Targetnombre en mi, por Podfilelo que se crea el mismo error para mí.

Solución

Simplemente vaya a project-> Build Phase->Link Binary with librariesEliminar lo antiguo FrameWorkshaciendo clic en minus button(-)Y limpiar y ejecutar nuevamente. Es trabajo para mí.

ingrese la descripción de la imagen aquí

Eliminar no deseados .framework.

Krunal Nagvadia
fuente
1

Las otras respuestas no me funcionaron, así que aquí comparto mi solución en caso de que pueda ayudar a alguien más:

Mi problema fue que estaba configurando el Podfile de mi XCode-Project para la plataforma incorrecta. Cambiar "plataforma: ios" al comienzo de mi Podfile a "plataforma: macos" funcionó para deshacerme del error.

Vorashy
fuente
0

Yo tuve el mismo problema. Si está revisando cualquier proyecto de github, entonces en lugar de usar git clone, use git lfs clone, ya que a veces, algunos archivos grandes no se clonan correctamente usando solo git. Además, asegúrese de que su código de bits esté desactivado.

Aman pradhan
fuente
buena nota ... pero normalmente la consola te avisará que algunos archivos son demasiado grandes para transferirlos.
Jake Dobson
0

Para mí, el archivo de bloqueo de gemas especificaba una versión anterior de cocoapods que la que había instalado. Tuve que volver a ramificarme y correr en bundle exec pod installlugar depod install

Jason
fuente
0

Parece que el problema es diferente para la mayoría de nosotros y el mensaje de error tiene información decente. En mi caso, el Deployment Target se estableció en 10.13la export MACOSX_DEPLOYMENT_TARGET=10.13línea, pero yo estaba corriendo 10.14. Así que tuve que cambiar mi destino de implementación a 10.14en General> Información de implementación para que los símbolos relacionados con ITLibrary volvieran a estar disponibles.

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
nishanths
fuente
0

En mi caso, estaba produciendo varios productos del mismo proyecto. Para uno de los productos, el main.marchivo importó un archivo de encabezado de otra carpeta del mismo proyecto. Pero ese archivo no se incluyó en "Fuentes cumplidas" en "Fase de compilación". Esto provocó un error del vinculador.

Después de comparar cuidadosamente la configuración de "Fases de compilación" para un producto que podría construirse con éxito, me di cuenta de que el .marchivo del encabezado debe incluirse en la lista de "Fuente compilada". Mi problema se resolvió después de agregar ese archivo. Adjuntar una imagen para mayor claridad. Se tuvo que agregar el archivo resaltado.

ingrese la descripción de la imagen aquí

Raiyan
fuente
-1

Tuve los mismos problemas al hacer una compilación del proyecto Ionic 1.

Pude resolver el problema después de eliminar el archivo CDVLogger.hy CDVLogger.m

KAUSHIK PARMAR
fuente
¿Parece que nunca necesitó esos archivos en primer lugar? Debe haber estado solicitando archivos en esos y otros archivos también, confundiendo el proyecto e impidiendo que se ejecute.
Jake Dobson
-4

Ok, tuve el mismo problema hoy y comencé a buscarlo en Google, cuando encontré este hilo. No he terminado de leer la pregunta cuando se me ocurrió la respuesta: declaré una clase con un constructor vacío

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Luego pensé por qué no terminar (no estoy seguro de si estoy en lo cierto con la selección de palabras aquí, pero a quién le importa) el constructor de mi clase con llaves ( {}). Así que lo hice:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

El problema eliminado, mi código comenzó a funcionar perfectamente.

Lo sé, la buena práctica es investigar el problema y encontrar la causa real, pero esto funcionó para mí.

Michael Gnedkovskii
fuente
No creo que esto sea útil para este hilo ... Parece que el error es intentar solucionar un problema de archivo, como importar lo mismo en archivos separados. Me parece extraño que obtenga este error, porque este es un error específico de Objective-C ...
Jake Dobson
También recibí este error en C ++. El error del vinculador en su caso probablemente fue que el vinculador no pudo encontrar el código para su constructor. Tuve un error similar con una función que cambié de nombre, pero debido a que Xcode 10 no abriría el registro del vinculador por sí solo, y no sabía que podía hacer clic con el botón derecho y "revelar en el registro", me quedé perplejo por algunos minutos intentando localizar el error.
Matt Parkins