O arquivo é universal (três fatias), mas não contém um erro de fatia (n) do ARMv7-s para bibliotecas estáticas no iOS, de qualquer maneira para ignorar?

403

I atualizado Xcode versão e quando usando bibliotecas estáticas externos, eu recebo essa mensagem:

ld: file é universal (3 fatias), mas não contém uma (n) fatia armv7s: / file / location para a arquitetura armv7s clang: error: o erro do linker falhou com o código de saída 1 (use -v para ver a chamada)

Existe alguma maneira de contornar isso e adicionar suporte à biblioteca se o desenvolvedor da biblioteca ainda não atualizou sua biblioteca?

Dafna Elazazer
fonte
Esta parece ser uma boa solução para agora - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Respostas:

418

Se você deseja remover o suporte para qualquer arquitetura, por exemplo, ARMv7-s no seu caso, use o menu Projeto -> Configurações de Construção -> remova a arquitetura de "arquiteturas válidas".

Você pode usar isso como uma solução temporária até que a biblioteca seja atualizada. Você precisa remover a arquitetura do seu projeto principal, não da biblioteca.

Como alternativa, você pode definir o sinalizador para "Build Active Architecture Only" da sua configuração de depuração como Sim. Deixe "Build Active Architecture Only" da configuração da versão em Não, apenas para que você receba um lembrete antes de liberar que você deve atualizar as bibliotecas de terceiros que estiver usando.

Nicholas
fonte
11
você não precisa recompilar a biblioteca. você pode remover esse sinalizador do projeto que está usando a biblioteca.
Nicholas
4
Funcionará, pois os aplicativos antigos que não foram compilados com o suporte do armv7s também precisam ser executados. Mas você perderá algumas otimizações específicas. Esta deve ser uma solução temporária de qualquer maneira.
Nicholas
2
Quadro Dropbox foi atualizado para este problema ver forums.dropbox.com/topic.php?id=90014
railwayparade
6
Remover armv7s da lista de arquiteturas válidas funcionou para mim, no entanto, o mesmo ocorreu com a remoção de arquiteturas. Em ambos os casos, no entanto, eu No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).pegaria o vinculador que só poderia resolver adicionando i386à lista de arquiteturas válidas.
precisa saber é o seguinte
6
Não, armv7s é o conjunto de instruções do processador A6 que está sendo usado no iPhone 5. Como o A6 é compatível com versões anteriores, ele ainda executará o conjunto de instruções armv7.
Nicholas
191

Simplesmente alternei entre "Build Active Architecture Only" e "Yes" nas configurações de construção do destino, e agora está tudo bem!

Blasco73
fonte
11
@ Blasco73 Você sabe mesmo que é incrível? Você deve. Aqui vai, senhor, é incrível!
Thandasoru 24/12/12
15
Como isso pode ser uma boa solução? Ele remove o erro, mas você só tem compilação para o arco atual, nem todos no mercado ...
esbenr
27

Tente remover armv7s da "Arquitetura válida" do projeto para lançar este problema para o telefone iOS 5.1

Arthur Jen
fonte
13

Acabei de publicar uma correção aqui que também se aplicaria neste caso - basicamente, você faz uma busca e substituição hexadecimal na sua biblioteca externa para fazê-la pensar que é o código do ARMv7s. Você deve poder lipodividi-lo em três bibliotecas estáticas, duplicar / modificar o ARMv7 e usá-lo liponovamente para montar uma nova biblioteca para todas as quatro arquiteturas.

Ertebolle
fonte
5

Suporte ao Flurry para iPhone 5 (ARMv7s) Como mencionei no post de ontem, o Flurry começou a trabalhar em uma versão do iOS SDK para dar suporte ao processador ARMv7s no novo iPhone 5 imediatamente após o anúncio na quarta-feira.

Fico feliz em dizer que o trabalho está concluído e o SDK agora está disponível no site.

RAZ
fonte
4

use o menu Projeto -> Configurações de compilação ->

remova armv7s das "arquiteturas válidas". Se o padrão foi escolhido, exclua-o e adicione armv7.

Panky
fonte
1

Caso isso aconteça com alguém. Criei minha própria biblioteca para usar com um código de terceiros. Enquanto eu o construía para entregar, deixei acidentalmente meu iPhone 4S conectado e, portanto, o Xcode construiu minha biblioteca apenas para a arquitetura conectada, em vez de seguir as configurações do projeto. Remova todos os dispositivos conectados e reconstrua a biblioteca, vincule-a e tudo ficará bem.

Espero que ajude.

Raphael Ayres
fonte
0

No meu caso, eu estava vinculando a uma biblioteca de terceiros um pouco antiga (desenvolvida para iOS 6, no XCode 5 / iOS 7). Portanto, eu tive que atualizar a biblioteca de terceiros, fazer uma Limpeza e Compilação, e agora ela é compilada com êxito.

Jay Imerman
fonte