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?

Picciano
fonte
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.

Picciano
fonte
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?

tania_S
fonte
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.

Adam G
fonte
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

Jason Silver
fonte
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
Matea
fonte
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.


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

iosCurator
fonte
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. :)

ManyuBishnoi
fonte
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;
Dan Loughney
fonte
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!

Saumil Shah
fonte
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

IsPha
fonte
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!

desenhou..
fonte
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.


fonte
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".

Mike Zriel
fonte
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.

Karthickkck
fonte
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.

Mahmoud Abualamrien
fonte
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.

R. Mohan
fonte
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.

Albert Renshaw
fonte
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

MobileMon
fonte
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 ++

Manish Gupta
fonte
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.

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

Dnyaneshwar Shinde
fonte