Estou recebendo um erro do Apple Mach-O Linker toda vez que importo um arquivo do CocoaPods.
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64
Recebo cerca de 12 deles, para os vários Pods que uso.
Estou tentando criar para o iPhone 5S usando o XCode 5.
Estou tentando várias soluções aqui no SO, mas ainda não tenho nenhuma para funcionar.
Como faço para corrigir este erro do Apple Mach-O Linker?
Acabei de encontrar outro aviso que pode ser interessante, espero que isso me leve à solução:
Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a,
file was built for archive which is not the architecture being linked
(arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a
Respostas:
Se suas arquiteturas e arquiteturas válidas estiverem corretas, verifique se você adicionou
$(inherited)
, que adicionará sinalizadores de vinculador gerados em pods, a outros sinalizadores de vinculador, como abaixo:fonte
Use the $(inherited) flag
aviso terminal ignorado . E o erro me trouxe aqui. salvou o meu dia.A questão é que os cocoapods não foram construídos para a arquitetura arm64 e, portanto, não podem ser vinculados quando você os constrói. É provável que você não possa usar esses pacotes até que sejam atualizados e use essa arquitetura. Você pode corrigir o erro do vinculador acessando projeto -> destino (nome do seu projeto) -> criar configurações e alterar arquiteturas para arquiteturas padrão (armv7, armv7s) e arquiteturas válidas para armv7, armv7s.
Observe, porém, que isso significa que você não obterá toda a potência do processador de 64 bits. Você disse que está construindo para o 5s, então pode haver algum motivo para você precisar disso. Se, por algum motivo, você precisar absolutamente desse poder (talvez esteja criando um jogo) e precisar desesperadamente desses arquivos, envie uma solicitação de recebimento e recompile o projeto para arm64, definindo esses mesmos campos para arm64 nos arquivos dos quais você retirou os projetos de código aberto. Mas, a menos que você realmente precise que esses arquivos sejam compatíveis com 64 bits, isso parece um pouco exagerado por enquanto.
EDIT: Algumas pessoas também relataram que a configuração de Build For Active Architectures como YES também era necessária para resolver esse problema.
A partir de 28/04/2014, a configuração deve ser algo como isto:
fonte
file
comando no Terminal para dizer quais arquiteturas uma biblioteca estática suporta.Resolvi esse problema definindo que:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
fonte
Corri para o mesmo problema / implementação similar
AVPictureInPictureController
e o problema era que não estava vinculando a estrutura do AVKit no meu projeto.A mensagem de erro foi:
A solução:
Espero que isso ajude alguém a encontrar um problema semelhante que eu tive.
fonte
Eu também encontrei o mesmo problema, os métodos acima não funcionarão. Apaguei acidentalmente os arquivos no diretório a seguir.
Posicionamento da pasta:
~ / Biblioteca / Desenvolvedor / Xcode / DerivedData /
fonte
Set Arquiteturas para ARMv7 armv7s , Construir arquitetura ativo Só para NO , para cada destino no projeto, incluindo cada um no Pods
fonte
Corrigi o meu verificando os arquivos de implementação selecionados na associação de destino no lado direito. Isso é útil especialmente ao lidar com extensões, como teclados personalizados.
fonte
Aqui estão algumas explicações porque
build_active_architecture
está definido como NÃO. O Xcode agora detecta quais dispositivos você conectou e configurará a arquitetura ativa de acordo. Portanto, se você conectar um iPod Touch de segunda geração ao seu computador, o Xcode deve definir a arquitetura ativa para armv6. Construir seu alvo com a configuração de depuração acima agora criará apenas o binário armv6 para economizar tempo (a menos que você tenha um projeto enorme, talvez não perceba a diferença, mas acho que os segundos aumentam com o tempo).Ao criar uma configuração de distribuição para publicação na App Store, verifique se essa opção não está definida, para que o Xcode construa o binário universal gordo http://useyourloaf.com/blog/2010/04/21/xcode -build-active-architecture-only.html
fonte
Você precisa apenas remover arm64 da Arquitetura válida e definir NÃO como Somente arquitetura ativa . Agora basta Limpar, Construir e Executar. Você não verá esse erro novamente.
:) KP
fonte
Resolvido após excluir o conteúdo do DerivedData -> Build -> Products -> Debug-iphoneos
fonte
Isso pode estar relacionado
libz.dylib
oulibz.tbd
, apenas é necessário adicioná-lo aos seus destinos para os binários vinculados e tentar compilar novamente.fonte
Eu o resolvi definindo archs válidos para armv7 armv7s e configurando arquiteturas ativas apenas para YES na versão e, em seguida, realizando uma nova "instalação de pod" na linha de comando
fonte
Dado um iPhone 5s e ainda não tendo recebido uma versão de 64 bits de uma biblioteca de terceiros, tive que voltar ao modo de 32 bits com o Xcode mais recente (antes da versão 5.1 não reclamava).
Corrigi isso excluindo arm64 da lista de arquiteturas válidas e definindo Build Active Architecture Only como NO. Parece-me que isso faz mais sentido do que o contrário, como mostrado acima. Estou publicando caso outras pessoas não consigam obter nenhuma das soluções acima para trabalhar para elas.
fonte
Eu tive o mesmo problema depois de atualizar para o Xcode 5.1 e corrigi- lo configurando Architectures para armv7 armv7s
fonte
Ficou preso nessa questão o dia inteiro.
Eu tinha vários esquemas, ele estava compilando bem para Demo, Internal, Release - no entanto, o esquema de depuração simplesmente não foi compilado e estava reclamando da falta do libPods.a.
A solução foi ir para Projeto -> Destino -> Configurações de compilação e alterar "Compilar somente a arquitetura ativa" para SIM. Limpe e construa! Finalmente, horas de coceira na cabeça resolvidas!
fonte
Definir
-ObjC
comoOther Linker Flags
em Configurações de compilação do destino resolveu o problema.fonte
Isso funcionou para mim:
ios sdk 9.3
na configuração de compilação da arquitetura válida app.xcodeproj: armv7 armv7s Build Active Architecture: Não
Limpar e construir, funcionou para mim.
fonte
O seguinte funcionou para eu obter a compilação GPUImage sem erros no Xcode 5.1 para o simulador de 64 bits e o iPad Mini retina, sem precisar remover arm64 da lista Arquiteturas válidas (que anula o propósito de possuir um dispositivo de 64 bits para teste Desempenho de 64 bits).
Faça o download da pasta .zip na página do GitHub: https://github.com/BradLarson/GPUImage
Descompacte e navegue até a pasta 'framework'. A partir daqui, adicione e copie a pasta 'Source' no seu projeto do Xcode. Verifique se 'Copiar itens na pasta do grupo de destino' está marcado e 'Criar grupos para todas as pastas adicionadas' também está marcado. Isso copiará os arquivos de cabeçalho / implementação genéricos, iOS e Mac no seu projeto.
Se você não precisar dos arquivos do Mac porque está compilando para iOS, poderá excluir a pasta Mac antes de copiar os arquivos no seu projeto ou simplesmente excluir o grupo do Xcode.
Depois de adicionar a pasta Source ao seu projeto, use o seguinte para começar a usar as classes / métodos do GPUImage:
Algumas coisas a destacar:
Espero que o exposto ajude - parece que não havia instruções claras em nenhum lugar, apesar da pergunta ser feita várias vezes, mas não tema, o GPUImage definitivamente funciona para a arquitetura arm64!
fonte
Esse problema ocorreu depois de instalar um pod via Podfile e
pod install
. Depois de tentar várias correções diferentes, finalmente importei o Pod manualmente (arrastando os arquivos necessários para o meu projeto) e isso resolveu o problema.fonte
Como a resposta da morisunshine apontou na direção certa, um pequeno ajuste em sua resposta resolveu meu problema para o iOS8.2. Obrigado a ele.
Resolvi esse problema definindo que:
fonte
fonte
No meu caso, eu tive que procurar
C++ Standard Library
e verifique selibc++
foi o selecionado.fonte
Para mim, uso o opencv 2.4.9 no xcode 7.2 para iOS e os erros acima ocorreram e resolvo os erros usando o opencv através da instalação do pod em vez da estrutura offline do opencv.
Você pode tentar adicionar o texto do pod opencv abaixo e excluir a estrutura opencv offline, se tiver usado.
pod 'OpenCV', '2.4.9'
fonte
Nenhuma das soluções corrige esse erro no meu caso (Xcode 9), com
TesseractOCRiOS
. Depois de horas de tentativa e erro, encontrei uma boa solução. Acabei de excluir'pod 'TesseractOCRiOS', '~> 4.0.0'
noPodfile
, executarpod install
. E então, adicionepod 'TesseractOCRiOS', '~> 4.0.0'
novamentePodfile
e executepod install
novamente.Bang! Funciona!
fonte
"O destino do OPN [Debug] substitui a configuração de compilação OTHER_LDFLAGS". Esta foi a questão principal. Depois de adicionar $ (herdado) na nova linha em outros sinalizadores do vinculador, resolvi meu problema.
fonte
em alguns casos, se você definir mais uma interface em um arquivo .h, mas não implementou todas essas interfaces, ocorreu este erro.
O vinculador não pode encontrar a implementação no arquivo .m, portanto, você deve implementá-la no arquivo .m para todas as interfaces.
Para resolver este erro:
1. no arquivo .m, forneça a implementação para cada interface. 2. reconstruir
fonte
Eu enfrentei o mesmo problema. Minha solução que encontrei aqui: Por que o vinculador vincula bibliotecas estáticas com erros? iOS
A adição de $ (TOOLCHAIN_DIR) / usr / lib / swift / $ (PLATFORM_NAME) aos caminhos de pesquisa da biblioteca resolveu o problema.
fonte
Estou enfrentando o mesmo problema depois de instalar a estrutura da AWS para solucionar esse problema. Atualizei o arquivo de configuração do POD do seu projeto, criado após a instalação do AWS POD. Verifique o arquivo de configuração como abaixo
se o seu arquivo de configuração não estiver funcionando corretamente, defina seu sinalizador Other Linker como $ (herdado)
fonte
Se as configurações de arquitetura e vinculador estiverem boas, verifique seus arquivos h. Meu problema foi o mesmo erro, mas reestruturei os arquivos h e removi uma instrução externa. Outros arquivos m estavam usando essa variável, causando o erro do vinculador.
fonte
Adicionar "Security.framework" fez o truque para mim.
fonte