O comando do linker falhou com o código de saída 1 (use -v para ver a invocação), Xcode 8, Swift 3

114

Não consigo me livrar desse erro!

Eu tentei todos os tipos de coisas como limpar Dados Derivados (Preferências-> Locais-> clique na seta cinza para abrir a pasta Dados Derivados no Finder-> clique com o botão direito, mover para o lixo), limpar o projeto (CMD + Shift + K ou Produto -> Limpar), atualizando cartago e dependências, verificou outras respostas no StackOverflow (principalmente ajustes em Configurações / fases de compilação) e reclonou o aplicativo do github, etc.

O mesmo projeto funciona nos computadores dos meus colaboradores.

EDIT: A partir da resposta mais bem avaliada atual, consegui depurar um pouco mais ... Ainda não tenho certeza de como consertar. Parece que tenho algo no projeto duas vezes? Eu olhei e não consigo encontrar nada aparecendo duas vezes!

Aqui está uma foto do registro:

Jake Dobson
fonte
por que você aceitou a resposta com melhor classificação se ela não resolveu seu problema ...?
benomatis de

Respostas:

160

Eu estava enfrentando o mesmo problema hoje no xcode 8 versão 8.3.2

clique com o botão direito no problema -> revelar no log

insira a descrição da imagem aqui

então você pode verificar o que está causando esse problema

insira a descrição da imagem aqui

umairqureshi_6
fonte
Obrigado por isso! Aqui está o que eu obtenho no log: imgur.com/vFkNJzZ
Jake Dobson
Eu finalmente resolvi isso. Você ajudou a me levar na direção certa! Foi realmente uma pena que o Xcode não revelou o log quando clicado ... Poderia ter me salvado algum tempo!
Jake Dobson
Obrigado pela dica Reveal in Log. Eu não sabia que poderia usá-lo
KarenAnne
1
@GhasemTabatabaei Verifique minha resposta abaixo
Jake Dobson
81
Por que essa é a resposta aceita? Na verdade, não responde à pergunta, apenas ajuda potencialmente a chegar à solução.
Tom Oakley,
116

Talvez você instalou um arquivo pod e ainda está tentando compilar a partir do .xcodeprojarquivo em vez de.xcworkspace

Aashish
fonte
4
Não, usei Cartago por esse motivo. Essa é uma resposta legítima que poderia ajudar outras pessoas com o mesmo erro, no entanto!
Jake Dobson
1
Eu adicionei o código m $ AppCenter a um projeto existente e ele precisava de pods. Não tinha ideia do que estava acontecendo e estava fazendo isso .xcodeprojpor mais de um ano .. Algo tão simples!
Dennis Smolek
1
Minha correção estava de alguma forma relacionada a isso. Recentemente, atualizei algumas dependências e o projeto agora usa CocoaPods. Anteriormente, estava sempre trabalhando com o arquivo do projeto. Abri o arquivo do espaço de trabalho, que continha meu projeto e pods, e tudo funcionou bem.
Rozgonyi
40

a única coisa que funcionou para mim foi correr pod deintegrateepod install

Charles Harring
fonte
A pergunta foi respondida. Se você ver meu comentário abaixo, eu importei um arquivo que já havia sido importado para aquele arquivo. O projeto estava em uma condição de corrida tentando fazer referência ao arquivo duas vezes.
Jake Dobson
ok sim, apenas não funcionou para mim e quando eu pesquisei, foi isso que apareceu, então pensei em tentar ajudar outra pessoa ... sou novo nisso, devo excluir minha resposta?
Charles Harring
Acho que não, pois já está lá. Tenho certeza de que alguém pode achar isso útil. O aplicativo que eu estava usando não usava cocoapods. O fato é que esse erro é muito comum e dá poucas informações sobre ele mesmo. Muitas soluções podem ser encontradas, dependendo de cada projeto.
Jake Dobson
Isso salva meu dia! Deus te abençoê!
user2612604
19

você tentou uma limpeza? cmd + shift + k

Francisco Perez
fonte
8
Ah, sim ... muitas vezes!
Jake Dobson
Isso é literalmente tudo o que recebo ... Clicar no texto não me leva a nenhuma informação extra ou ao local do arquivo onde aconteceu, como acontece com a maioria dos erros. Nada no console, ele nunca consegue executar o aplicativo por causa desse erro.
Jake Dobson
FWIW, encontrei esse problema recentemente ao compilar com um SDK e a sugestão de @ FranciscoPerez funcionou. Definitivamente, recomendo como uma primeira etapa antes de se aprofundar na depuração.
riastrad
9

Ok ... Então aqui está o que resolveu meu problema ...

no arquivo App Delegate:

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

Eu importei Credentials.h já no arquivo DarkSkyAPI.m no meu projeto. Comentar a importação extra eliminou o erro!

Algumas coisas para mencionar e talvez ajudar alguém no futuro. A resposta de @ umairqureshi_6 ajudou-me no processo, mas não o resolveu. Ele me levou até onde eu consegui encontrar a informação. Eu continuava vendo os arquivos AppDelegate e DarkSkyAPI aparecendo no log de erros e as informações que ele extraía do arquivo de credenciais estavam causando o erro. Eu sabia que deveria estar em um desses 3 arquivos, então verifiquei imediatamente as importações, porque me lembrei de ouvir que o .h carrega todas as importações de seu arquivo .m. Estrondo!

Jake Dobson
fonte
6

Eu sei que a pergunta já foi respondida. Mas se isso ajuda alguém a economizar tempo: eu tive o mesmo erro. Verifiquei tudo para encontrar um erro muito pequeno e estúpido da minha parte. Importei um arquivo personalizado ManagedObject de dados principais em um controlador de visualização do meu projeto. Eu acidentalmente importei o arquivo .m em vez do arquivo .h que estava causando o símbolo duplicado no erro de arquitetura (o comando do vinculador falhou) porque meu arquivo .m da classe de propriedades importa o arquivo .h da classe de dados principais e, portanto, causando a importação duplicada.

Portanto, verifique se você importou os arquivos corretos antes de tentar várias soluções.!

Priyanka
fonte
Sim! Isso era muito semelhante ao meu problema. Tive o mesmo arquivo importado duas vezes no meu projeto. Em vez disso, importei um "fileA.h" para "fileB.h", mas importei "fileA.h" e "fileB.h" para "fileC.h" ou algo parecido ... Assim, o aplicativo trava porque não sabe qual usar. Definitivamente, um bom lugar para ter um lembrete para que outras pessoas verifiquem suas importações de arquivos!
Jake Dobson
6

Muitas soluções são mencionadas acima. Ninguém trabalhou para mim (mas tente acima primeiro).

Selecione Projeto -> Selecionar destino -> Estrutura e bibliotecas vinculadas -> Adicionar todas as bibliotecas de pod. (remova se eles existirem em binários incorporados)

Agora remova-os da pasta Framework no explorador de arquivos esquerdo do xcode.

Isso resolveu meu problema.

Aaban Tariq Murtaza
fonte
4

Selecione o projeto-> Build Phase-> Link Binary with library e adicione todas as bibliotecas de pod.

K Prasad
fonte
3

Eu tive o mesmo problema ao usar Cartago para dependências.

Basta ir para Selecionar Projeto -> Configurações de Compilação -> Pesquisar Habilitar Código de Bit -> Se estiver selecionado para Sim, selecione Não.

Isso resolveu esse problema para mim.

Adri Silva
fonte
2

Eu tive o mesmo problema.

A causa foi que eu declarei a mesma variável global em 2 arquivos . Portanto, estava mostrando o mesmo erro dizendo 2 símbolos duplicados .

A solução foi remover essas variáveis.

Ajit A. Kenjale
fonte
1
por que você removeu ambos e não apenas um?
Jake Dobson,
2

Para qualquer um que tenha esse problema com a estrutura Flurry. Isso é o que resolveu meu problema. Para mim, o problema é que importei os arquivos a seguir, mas nunca os usei. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Então, tudo que tive que fazer foi ir para as configurações de destino do projeto e remover esses 2 arquivos da seção "Framework e bibliotecas vinculadas" e o problema foi resolvido.

Cedan Misquith
fonte
2

No meu caso, o motivo do erro é a biblioteca que foi vinculada duas vezes.

Eu uso react-nativeentão ele foi linkado automaticamente usando react-native linke manualmente no xcode.

Stanislav Mayorov
fonte
2

Certifique-se de que a Find Implicit Dependenciescaixa de seleção esteja marcada.

(Produto -> Esquema -> Editar Esquema -> Construir -> Encontrar Dependências Implícitas)

llama591
fonte
2

Eu estava testando a estrutura Sparkle com CocoaPods.

Infelizmente, coloquei pod 'Sparkle', '~> 1.21'o PodFile no lugar errado. Eu coloquei abaixo de Teste (para testes de unidade).

Depois de colocado no local correto no PodFile, está tudo bem.

PDQ
fonte
1

Eu só tinha que fazer import Foundation!

Eu estava usando o Kitura para o servidor Swift e sempre me esquecia disso!

Mel
fonte
Ha. Sim, você sempre precisará importar pelo menos o Foundation antes de fazer qualquer coisa! Eu normalmente importo o UIKit em vez do Foundation, porque quase sempre vou precisar usar recursos do UIKit e o UIKit herda tudo do Foundation para você. As importações com Objc podem ser bem complicadas, mas parece que você estava usando o Swift?
Jake Dobson
Sim, eu estava usando o Swift, o arquivo em questão não apresentava nenhum problema de compilador, mas apenas durante a execução do arquivo, encontrei esse problema!
Honey,
1
Sim, eu não acho que realmente verifique isso até o tempo de execução, posso estar errado. Mas, parece que não haveria problema até que você tentasse acessar algo do Foundation, não conseguisse encontrar a importação e depois não pudesse continuar o processo - travou!
Jake Dobson,
1

Aqui está meu problema e solução:

Removi dois arquivos do código-fonte usando a árvore de origem (controlador de versão). Depois de aplicar o diff, que contém as duas classes que removi, o Xcode não o adicionou automaticamente. Então, recebi um erro de vinculador.

Eu adicionei os arquivos manualmente, clicando com o botão direito no nome do grupo e selecione "Adicionar arquivos a". Agora meu erro foi resolvido.

Se alguém encontrou o erro do vinculador em relação ao arquivo de classe, tente adicioná-lo manualmente.

Sujananth
fonte
1
Definitivamente, parece um problema de arquivo que eles estão tentando sugerir ... Arquivos em outros lugares não estão recuperando informações uns dos outros parece ser comumente encontrado nesta página. Obrigado pela sua resposta. Esperando que ajude alguém no caminho!
Jake Dobson
1

Não tive esse problema quando criei e executei em meu próprio dispositivo. Só tive esse problema com simuladores. Simplesmente reiniciei meu computador e o executei. Funcionou.

therealManUtdFan
fonte
1

No meu caso mudei o Targetnome no meu PodfileEntão é criar o mesmo erro para mim.

Solução

Basta ir project-> Build Phase->Link Binary with librariesRemover o antigo FrameWorksclicando em minus button(-)E limpar e executar novamente. É trabalhar comigo.

insira a descrição da imagem aqui

Remova indesejados .framework.

Krunal Nagvadia
fonte
1

As outras respostas não funcionaram para mim, então aqui eu compartilho minha solução, caso possa ajudar outra pessoa:

Meu problema é que estava configurando o Podfile do meu projeto XCode para a plataforma errada. Alterar "platform: ios" no início do meu Podfile para "platform: macos" funcionou para me livrar do erro.

Vorashy
fonte
0

Eu tive o mesmo problema. Se você estiver fazendo check-out de qualquer projeto github, em vez de usar git clone, use git lfs clone, pois às vezes alguns arquivos grandes não são clonados apropriadamente usando apenas git. Além disso, certifique-se de que seu código de bits esteja desativado.

Aman Pradhan
fonte
boa nota ... mas normalmente o console avisa que alguns arquivos são muito grandes para serem transferidos?
Jake Dobson
0

Para mim, o arquivo gem lock estava especificando uma versão mais antiga do cocoapods do que a que eu tinha instalado. Tive que ramificar novamente e executar em bundle exec pod installvez depod install

Jason
fonte
0

Parece que o problema é diferente para a maioria de nós, e a mensagem de erro tem informações decentes. No meu caso, a meta de implantação foi definida para 10.13perto da export MACOSX_DEPLOYMENT_TARGET=10.13linha, mas eu estava correndo 10.14. Portanto, tive que mudar meu Deployment Target para 10.14em Geral> Deployment Info, para que os símbolos relacionados à ITLibrary estivessem disponíveis novamente.

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
fonte
0

No meu caso, eu estava produzindo vários produtos do mesmo projeto. Para um dos produtos, o main.marquivo importou um arquivo de cabeçalho de outra pasta no mesmo projeto. Mas esse arquivo não foi incluído em "Fontes compiladas" em "Fase de construção". Isso causou um erro de vinculador.

Após comparar cuidadosamente as configurações de "Build Phases" de um produto que poderia ser construído com sucesso, percebi que o .marquivo do cabeçalho precisa ser incluído na lista de "Compiled Source". Meu problema foi resolvido depois de adicionar esse arquivo. Anexando uma imagem para maior clareza. O arquivo destacado teve que ser adicionado.

insira a descrição da imagem aqui

Raiyan
fonte
-1

Tive os mesmos problemas ao fazer uma compilação do projeto Ionic 1.

Consegui resolver o problema após excluir o arquivo CDVLogger.h & CDVLogger.m

KAUSHIK PARMAR
fonte
parece que você nunca precisou desses arquivos em primeiro lugar? Deve ter chamado por arquivos nesses e em outros arquivos também, confundindo o projeto e impedindo sua execução.
Jake Dobson,
-4

Ok, eu tive o mesmo problema hoje e comecei a pesquisar no Google, quando me deparei com este tópico. Não terminei de ler a pergunta quando a resposta me ocorreu: declarei uma classe com um construtor vazio

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

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

Então pensei por que não encerrar (não tenho certeza se estou correto com a seleção de palavras aqui, mas quem se importa) o construtor da minha classe com chaves ( {}). Então eu fiz:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

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

Eliminado o problema, meu código começou a funcionar perfeitamente.

Eu sei, a boa prática é investigar o problema e encontrar a causa real, mas funcionou para mim.

Michael Gnedkovskii
fonte
Eu não acho que isso seja útil para este tópico ... Parece que o erro está tentando resolver um problema de arquivo, como importar a mesma coisa em arquivos separados. Acho estranho que você receba este erro, porque este é um erro específico do Objective-C ...
Jake Dobson
Também recebi esse erro em C ++. O erro do vinculador no seu caso foi provavelmente que o vinculador não conseguiu encontrar o código para o seu construtor. Tive um erro semelhante com uma função que renomeei, mas como o Xcode 10 não abria o log do vinculador por conta própria e não sabia que você podia clicar com o botão direito e "revelar no log", fiquei perplexo por alguns minutos tentando localizar o erro.
Matt Parkins