Símbolos duplicados para arquitetura arm64


103

Quando tento executar meu projeto Xcode, ele falha com um erro informando que tenho símbolos duplicados. Procurei online onde encontro essas duplicatas, mas não tive sorte:

insira a descrição da imagem aqui

Alguma ideia de como consertar isso?


1
significa que você tem muito BFAppLinkReturnToRefererView
Andrey Chernukha

Além disso, você pode querer limpar um pouco seu projeto em vez de vincular a estruturas que estão em sua área de trabalho. :)
picciano 10/10/2014

No meu caso, adicionei extern NSString * const tColor; no arquivo .h e NSString const * tColor = @ "# 000022"; em duas classes .m diferentes.
ios_dev

Você pode encontrar o que procura aqui stackoverflow.com/a/46678210/988941
MoOx

Respostas:


65

Pelos erros, parece que o FacebookSDK.framework já inclui as classes Bolts.framework. Tente remover o Bolts.framework adicional do projeto.


22
como? você pode me orientar passo a passo
Imdad Ali

68

Para mim, ajudou a mudar a configuração do compilador "Sem blocos comuns" para NÃO: Parece fazer sentido, a configuração é explicada aqui: Para que é usado GCC_NO_COMMON_BLOCKS?


Você é o cara! Acabei de criar um novo projeto xCode 7.3.1 e a configuração padrão é SIM :(
Yaro

4
Esta opção foi ativada para mim pela janela "Atualizar projeto para configurações recomendadas" do Xcode.
verificação de

Você é o melhor
showmyroutes

dica inestimável, mas doh não ajudou no meu caso! : O
Fattie

49

Usando o Xcode 8, a opção "Atualizar projeto para as configurações recomendadas" ativou 'Sem blocos comuns' para meu projeto.

Desligar novamente consertou tudo.


2
Atualize o projeto para as configurações recomendadas, como faço isso? quero dizer, de qual menu?
Sazzad Hissain Khan

@SazzadHissainKhan Está nas configurações de construção.
Viagem em

21

Para mim foi porque importei um arquivo como .m não como .h por engano


Isso é LOL, mas é verdade; D
Vladimir

isso aconteceu comigo .. Eu culpo o preenchimento de código por tudo
user426132

21

Eu baguncei meus pods ao fazer o downgrade de um pod e consegui resolver o problema com símbolos duplicados para a arquitetura arm64 removendo os pods e instalando-os novamente com:

pod deintegrate
pod install

Eu estava usando o SDK do Google Places, integrado por meio do CocoPods - 3.9.0, e essa resposta corrigiu meu problema.
andrewlundy

12

Outra solução é:

Selecione Projeto -> Destino -> Fase de construção -> Fonte de compilação -> procure o arquivo que é mencionado na 3ª última linha de erro (no seu caso BFAppLinkReturnToRefererView.o ).

Em seguida, você verá 1 ou 2 arquivos no resultado da pesquisa.

Remova um deles e compile novamente . Ele deve recompilar agora porque há apenas um arquivo restante e não há mais conflitos para compilar.

Se isso não funcionar, o arquivo provavelmente contém erros e você deve remover todos eles e recompilar. Deve funcionar novamente.


2
Resposta extremamente subestimada, obrigado pela ajuda, Lukas! :)
patreu22

Sem problemas, feliz por ter resolvido o seu problema :)

10

Ao atualizar para o Xcode 8, recebi uma mensagem solicitando a atualização para as configurações recomendadas. Aceitei e tudo foi atualizado. Comecei a ter problema de tempo de compilação:

Símbolo duplicado para XXXX Símbolo duplicado para XXXX Símbolo duplicado para XXXX

Um total de 143 erros. Acessou Target-> Build settings -> No Common Blocks -> Set it to NO. Isso resolveu o problema. O problema era que os projetos integrados tinham blocos de código em comum e, portanto, não eram capazes de compilá-los. A explicação pode ser encontrada aqui .


9

Este erro ocorre quando o Linker está tentando vincular os arquivos obj. Alguns motivos que eu poderia pensar para esse erro são:

  1. A Função / Classe duplicada é definida em dois locais / arquivos diferentes no projeto e apenas um deles deveria compilar para qualquer variação do comando de construção. Mas, de alguma forma, ambos os arquivos foram compilados em seu projeto. Portanto, você precisa verificar suas condições if-else ou outras dependências que adicionam arquivos src à lista de arquivos que precisam ser compilados e remove o arquivo desnecessário para seu comando de construção específico.

  2. A Função / Classe duplicada é definida acidentalmente em dois locais / arquivos diferentes no projeto. Remova a definição errada.

  3. Limpe seu diretório OBJ antes de construir novamente, pode haver alguns arquivos obj antigos de suas compilações anteriores que podem estar causando este conflito.

PS Não sou especialista, mas foi assim que resolvi esse problema quando o enfrentei. :)


9

Se você está mudando para o Xcode 7 ou 8 e está abrindo um projeto muito antigo, encontrei este problema:

no SomeConstFile.h

NSString * const kAConstant;

no SomeConstFile.m

NSString *const kAConstant = @"a constant";

As versões anteriores do compilador presumiam que a definição no arquivo de cabeçalho era externa e, portanto, incluir SomeConstFile.h em todo o lugar era adequado.

Agora você precisa declarar explicitamente essas consts como externas:

no SomeConstFile.h

extern NSString * const kAConstant;

1
Obrigado por isso! Estava lutando com um problema com um arquivo constants.h que eu estava criando lol
Sung Min Kim

1
Obrigado pela resposta Eu também estava enfrentando o mesmo problema e sua resposta funcionou para mim ...
reetu

1
Obrigado, eu estava lutando contra este problema nas últimas 3-4 horas
Sumit Kumar Saha

9

O Patch abaixo funciona para mim .. :)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

Definir de volta para NÃO resolveu o problema!


2
Etapa 2: resolveu meu problema. Obrigado :)
Dorald

2

Bem, algumas vezes ao usar SDK como FB ou Bibliotecas como Vuforia ou GoogleAnalytics, adicionar exemplos de projetos pode causar o problema de já estarem incluindo Frameworks e assim por diante, então você deve ter certeza de não repetir símbolos adicionados manualmente enquanto eles já estão incluído nas amostras


2

Para mim, o problema era o estilo de criação de const, que funcionava bem até este iOS8 .. eu tinha algumas linhas como:

int const kView_LayoutCount = 3;

no meu arquivo .h. Seis linhas como resultaram em 636 arquivos de linker depois que os blocos comuns foram definidos como NÃO. (14k + se SIM). Mover as linhas para .m após retirar .h da declaração de valor e a compilação estava pronta para prosseguir.

Espero que isso ajude outras pessoas!


2

No meu caso, a razão era muito estúpida:

Eu tinha um arquivo Constant.h onde tinha macros definidas. Pensei em fazer NSString lá. e fez isso:

NSString const *kGreenColor = @"#00C34E";

isso causou o problema de símbolos duplicados para arquitetura arm64 e o comando Linker falhou com o código de saída 1. A remoção da linha Const NSString funcionou para mim.


2

verifique seu arquivo de inclusão, tive esse problema porque acidentalmente #importei "filename.m" em vez de "filename.h", autocorreção (guia) colocou um "m" e não "h".


Muito obrigado, não percebi que tinha cometido esse erro, estava ocupando todo o meu tempo. Obrigado novamente 👍
Supertecnoboff

1

A partir dos erros, pareceria que todas as Classes aparecem várias vezes. Encontre e removidas as Classes que estarão funcionando.

Estou criando arquivos AppDelegate.h e .m criando várias vezes. Portanto, esse erro ocorrerá. Finalmente localizei e removi essas classes que estão funcionando bem para mim.


1

para resolver este problema vá para as fases de construção e pesquise sobre o arquivo duplicado como (facebookSDK, unidadeads) e exclua (extensão arquivo.o) e depois crie novamente.


0

Para mim, criei um método chamado sampleMethodem ViewController_A e também criei o mesmo método em ViewController_B. Isso me causou esse erro, então mudei o nome do método em ViewController_B para secondSampleMethod. Ele corrigiu o erro.

Parece um bom recurso para reduzir o código e não duplicar o mesmo código em muitos lugares.

Tentei alterar os blocos Não Comuns de Sim para Não e ativar a testabilidade de Sim para Não. Não funcionou. I Verifiquei os arquivos duplicados também nas fases de construção, mas não há arquivos duplicados.


0

Tive esse problema porque estava definindo preguiçosamente uma variável em meu .m fora de um método, então em outro arquivo .m eu estava definindo outra variável com o mesmo nome fora de um método. Isso estava causando um problema de duplicação do nome da variável global.


0

O problema para mim é que incluí manualmente uma estrutura, mas também incluí essa mesma estrutura no CocoaPods sem saber que o fiz. Depois que removi um ou outro, o problema foi embora



0

Consegui resolver este erro que dizia "158 símbolos duplicados para a arquitetura armv7, 158 símbolos duplicados para a arquitetura arm64" --- Se é isso que você também está obtendo, significa que está tentando compilar um arquivo que está importando ou herdar uma estrutura ou biblioteca estática com referências a códigos ou arquivos C ++. Uma maneira fácil de lidar com isso seria alterar a extensão do arquivo .m para .mm. É assim que ele é tratado se você estiver usando Objective C, mas não tenho certeza no Swift.

Também nas configurações de compilação - você pode atualizar as "outras sinalizações de vinculador" para -lc ++


0

Se alguém está experimentando isso trabalhando no Flutter, não tente desintegrar pod, pod init.

Resolvi executar flutter clean, flutter run -d [dispositivo iOS]

Espero que possa ajudar alguém.


0

Plz Alterar configuração.

Etapa 1: Vá para TARGETS -> Build Settings -> No Common Blocks -> No

Etapa 2: Vá para TARGETS -> Build Settings -> enable testability -> No

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.