Erro de compilação - arquitetura i386 necessária ausente no arquivo


105

Estou recebendo este erro ao construir meu aplicativo para iPhone:

ld: aviso: em /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, falta a arquitetura necessária i386 no arquivo

O mesmo vale para todas as estruturas do meu aplicativo. É muito estranho já que isso não estava acontecendo antes.


Isso aconteceu depois de instalar o Snow Leopard e o novo iPhone SDK (Xcode 3.2)?
— avocade

8
Minha resposta resolve o problema. Por favor, verifique.
— Jordan,

9
Uma outra possibilidade que não é discutida nas respostas é que você obterá esse erro se tiver adicionado uma referência a uma estrutura não universal (ou seja, você adicionou uma estrutura armv6 / armv7 e depois tentou fazer uma construção de simulador). Essa é uma preocupação principalmente se você estiver construindo suas próprias estruturas customizadas.
— aroth

@aroth também está correto, verifique esta pergunta
— ArkReversed

Respostas:


131

Isso acontece quando você adiciona uma estrutura ao seu projeto e, sem querer, copia a estrutura para o diretório do projeto.

A correção é verificar o diretório do projeto (onde você armazena o projeto no disco) para qualquer arquivo iphone SDK * .Framework e excluí-los.

O projeto ficará bem depois disso.


4
além disso, teste-o no dispositivo iOS em vez do simulador.
— Raptor

Se você tiver outra estrutura, então modificar o arquivo do projeto parece excluir as referências a ela também, funcionou, e foi mais fácil, obrigado Jordan
— texian

Nao funciona para mim. Nenhum arquivo .framework no meu diretório de projeto. Fwiw, fiz uma limpeza e depois uma compilação e esse problema começou. O limpo de alguma forma deve ter quebrado coisas.
— Alyoshak

85

Eu tive o mesmo problema, e a solução acabou sendo fácil de resolver. Faça backup e abra o project.pbxproj (localizado dentro do pacote do arquivo do projeto) em TextMate ou TextEdit e procure a seção intitulada "/ * Begin XCBuildConfiguration section * /". Procure uma chave chamada FRAMEWORK_SEARCH_PATHS e exclua-a e seu conteúdo (uma vez por configuração de compilação, portanto, removi-a em dois lugares). Aqui está um exemplo do que eu excluí:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Meu projeto agora é construído para o dispositivo iPhone e o iPhoneSimulator.


2
Posso verificar se isso funciona conforme descrito. Parece que o Xcode pode facilmente perder o contato com seus metadados ao mover projetos do Xcode entre diferentes computadores; neste caso, um com 3.0 e Leopard e o outro 3.1 e Snow Leopard instalados. Os metadados FRAMEWORK_SEARCH_PATHS são exibidos em branco nas configurações de compilação, enquanto o project.pbxproj real contém itens.
— avocade

1
FRAMEWORK_SEARCH_PATHS concordado também apareceu em branco nas configurações de compilação para mim também. No entanto, a edição manual do arquivo project.pbxproj conforme descrito corrigiu o problema.
— Alasdair Allan,

11
Isto não funcionou para mim. NO ENTANTO, você me leva ao lugar certo para procurar. Meu .pbxproj não tinha a chave FRAMEWORK_SEARCH_PATHS, mas uma chave chamada LIBRARY_SEARCH_PATHS.
— rebelião de

Eu apoio @rebellion. Talvez as versões mais recentes do XCode tenham alterado o nome da chave.
— Moshe

Obrigado, eu também tinha uma chave perdida LIBRARY_SEARCH_PATHS em meu arquivo pbxproj. A chave apareceu em negrito nas Configurações do projeto no Xcode 3, mas sem nenhum valor. Isso me levou a acreditar que algo estava errado. Eu abri o projeto no Xcode 4 Preview 5 uma vez, depois disso aconteceu.
— mvexel

43

O que aconteceu aqui é que o Xcode adicionou misteriosamente uma entrada "Framework Search Paths" que aponta para um SDK de dispositivo iPhone específico. Por exemplo, o meu foi recentemente definido para:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Isso leva o compilador a encontrar estruturas da arquitetura incorreta. Remover quaisquer valores da chave "Framework Search Paths" nas configurações de compilação do seu destino resolverá o problema.


esse era o problema no meu caso. ele adicionou um monte de diretórios de pesquisa sempre que adiciono uma nova biblioteca. mesmo se eu remover a referência, a entrada do diretório de pesquisa costumava estar lá e causou o problema.
— darshansonde

"Framework Search Paths" já estão vazios no meu caso. O erro exato que estou recebendo é ld: build for iOS Simulator, mas a vinculação com dylib construída para o arquivo MacOSX '/usr/lib/libSystem.B.dylib' para a arquitetura i386 clang: error: o comando do linker falhou com o código de saída 1 ( use -v para ver a invocação) Estou usando o SDK 7.0 no Mavericks.
— Ans

Eu tive o mesmo erro, removi os valores do caminho de pesquisa do framework nas configurações de Build e agora ele compila com sucesso.
— Nirav

10

Eu só queria mencionar que, no XCode, se você ir em "Edit Project Settings" e encontrar "Search Paths", há um campo para "Framework Search Paths". Atualizar isso deve resolver o problema, sem ter que hackear o arquivo do projeto!

Felicidades!

Jesse


Eu tenho o mesmo problema que está me deixando totalmente louco. Parece que vocês conhecem a solução, mas não consigo localizar o arquivo "project.pbxproj" e não consigo encontrar onde "Editar configurações do projeto" está localizado.
— saman01

2
No XCode 4.2.1 eu achei isso da seguinte maneira: clique no nome do projeto no Project Navigator. Na tela de propriedades que aparece, selecione a guia 'Build Settings'. Os caminhos de pesquisa estão localizados nesta tela. Excluí-los funcionou para mim.
— dsteele

8

Verifique se você não copiou a estrutura em seu projeto quando a adicionou. Se você o copiou, ele não consegue encontrar os caminhos originais. Para resolver esse problema. Exclua a estrutura AVFoundation de sua pasta de estruturas em seu projeto e, em seguida, adicione-a novamente, mas, desta vez, certifique-se de que a verificação de cópia não esteja marcada.

Isso consertou para mim!


8

Corrigi de uma maneira diferente. A razão pela qual recebi esse erro foi porque adicionei security.framework duas vezes em meu projeto. Não consegui ver o framework de segurança no xcode, abri o projeto no finder e encontrei este framework que eu apaguei e o problema foi resolvido.


7

Se o seu aplicativo se destina a ser executado no dispositivo, certifique-se de não tentar executá-lo no simulador. Pode parecer óbvio, mas verifique mesmo assim.


5

Embora seja possível que algo tenha sido excluído, minha experiência mostra que algo fica bagunçado no arquivo do projeto. Ainda não consegui definir o que é esse "algo". Tive problemas semelhantes quando a instalação do SDK estava normal. Há um par de opções.

Primeiro, adicione todos os seus arquivos a um novo projeto. Isso geralmente parece funcionar. Mas é meio chato.

Em segundo lugar, você pode clicar com o botão direito do mouse no projeto em XCode / Get Info / Build / Library Search Paths. Adicione novos caminhos semelhantes a /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Adicione as versões apropriadas dessa string para cada versão (2.2.1, etc) e plataforma (simulador ou iPhoneOS). Execute uma ação semelhante para Caminhos de pesquisa de estrutura se as estruturas forem o seu problema.

Terceiro, o que é mais trabalhoso, porém mais confiável, é abrir project.pbxproj de dentro de MyProject.xcodeproj (o Textmate é bom para isso). Procure por "/ * Begin XCBuildConfiguration section * /", depois "LIBRARY_SEARCH_PATHS" e "FRAMEWORK_SEARCH_PATHS". Adicione ou modifique os caminhos conforme apropriado e salve o arquivo.

Em qualquer caso, um pé no saco, e com certeza gostaria de apontar a causa, porque isso já aconteceu algumas vezes. O projeto constrói bem, então simplesmente levanta e se recusa a fazê-lo com o que parece ser um pequeno motivo.


Vou começar um novo projeto. Oh bem.
— Gabe Shahbazian

Você pode corrigir as configurações de construção "Frameworks Search Paths" no painel de informações de um destino.
— John Cromartie

Recebi o erro, mas não tinha os problemas de estrutura descritos acima. Curiosamente, em um computador, o projeto poderia ser retirado do SVN e construído corretamente, enquanto em dois outros, de repente resultou neste erro em cada construção. A única solução (e bastante simples) - depois de tentar todos os tipos de outras soluções - foi criar um novo projeto em branco e mover todos os arquivos para ele.
— mmattke,

Este método funcionou para mim. Eu tinha um conjunto de projetos funcionando que de repente parou de ser construído para exatamente uma configuração um dia. Sem motivo. Usei a técnica textmate acima e notei que "$ (SDKROOT) / Developer / Library / Frameworks" estava faltando nessa configuração. Não tenho ideia do porquê, e não consegui ver isso usando o Xcode.
— Rob

4

"Editar configurações do projeto" e localizar "Caminhos de pesquisa" Há um campo para "Caminhos de pesquisa do framework". exclua tudo !!


4

Aconteceu aqui comigo também. Graças a um grande parceiro, encontramos a resposta. Seu Xcode pode estar apontando para o simulador .. altere-o para um dispositivo IOS ao invés ..construído suavemente após ....


1

Execute o comando file na estrutura do Terminal:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Você deve receber uma mensagem informando com quais arquiteturas o binário UIKit é compatível. Se você não vir "i386" listado, então, de alguma forma, você conseguiu remover a versão i386 do UIKit, o que significa que você não pode construir para o simulador. Para consertar isso, você terá que reinstalar o SDK.

Se você receber algum outro erro, espero que ele o ajude a descobrir qual é o problema real.


Reinstalei o sdk e ainda recebo o mesmo erro de compilação exato.
— Gabe Shahbazian,

estou tendo esse problema. já verifiquei a estrutura e o caminho da biblioteca e estão limpos. o arquivo de comando /Developer/Platforms.../UIKit.framework/UIKit diz apenas "braço de biblioteca compartilhada vinculado dinamicamente Mach-O". é realmente necessário instalar todo o SDK? ou posso copiar a versão completa do framework?
— Alexander Fradiani

Bom aprender! para o meu caso, armv7 e i386 estão lá, mas não armv6!
— Nianliang

1

Só quero que você saiba que, no meu caso, eu estava tendo o mesmo problema, percebi que tinha uma pasta Xcode mais antiga chamada Xcode3.1.3. Acabei de renomeá-la porque era uma versão mais antiga e isso fez a mágica para mim.


1

Verifique os caminhos de pesquisa da biblioteca nas configurações de destino. Às vezes, bibliotecas idiotas são inseridas lá e isso causará um erro semelhante.

Você pode remover todas as entradas nesta seção.


0

Eu tinha acabado de experimentar algo um pouco diferente, porque trabalho na minha própria biblioteca (WM_GSRecognizerLib), mas o erro é o mesmo.

O que aconteceria: devido a algumas atualizações, o caminho direcionado à biblioteca a ser incluída (.a) era da pasta "Debug-iphoneos" (onde é gerada). Compilar para dispositivos iOS genéricos funcionou bem, mas não para o simulador, reclamando da ausência da arquitetura i386.

O que fiz para esse problema foi incluir também os binários da pasta "Debug-iphonesimulator".

Isso pode ajudar neste tópico, porque a explicação está aqui: os dispositivos requerem binários para arm64 / armv7 / armv7s, enquanto o simulador precisa de i386.


0

Minha solução foi definir no simulador target debug YES, basta olhar no git status para ver a nova linha adicionada como arquitetura apenas em .project. se você não definir isso, a construção será executada em todas as arquiteturas e mostrará algumas arquiteturas ausentes, como i386 ou outra. OBSERVE QUE, obviamente, o principal problema é usar alguma estrutura que implemente algum tipo de arquitetura específica.


-1

Eu também recebi o mesmo erro ao usar o xcode versão 4.0.2, então o que fiz foi selecionar o arquivo de projeto xcode e, a partir deles, selecionei a opção Alvo e pude ver o aplicativo do meu projeto, então cliquei nele e fui para o build opção de configurações.

Na opção de pesquisa digitei caminho de pesquisa do Framework , excluí todas as configurações e cliquei no botão construir e funcionou bem para mim,

Obrigado e cumprimentos

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.