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:
Alguma ideia de como consertar isso?
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:
Alguma ideia de como consertar isso?
Respostas:
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?
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.
Para mim foi porque importei um arquivo como .m não como .h por engano
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
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.
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 .
Este erro ocorre quando o Linker está tentando vincular os arquivos obj. Alguns motivos que eu poderia pensar para esse erro são:
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.
A Função / Classe duplicada é definida acidentalmente em dois locais / arquivos diferentes no projeto. Remova a definição errada.
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. :)
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;
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!
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
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!
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.
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".
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.
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.
Para mim, criei um método chamado sampleMethod
em 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.
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.
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 ++
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