Xcode Linking Erro ao segmentar o ARMV7
Pergunta
Eu já passei inúmeras horas intrigando sobre isso, utilizando pesquisas no Google e outras perguntas sobre o pilhas sem sucesso.
Eu tenho um aplicativo universal para iPhone/iPad, que parece compilar bem quando o destino é o ARMV6. No entanto, quando o dispositivo é iPad, recebo este aviso:
warning: building for SDK 'Device - iPhone OS 3.2' requires an armv7 architecture.
Curiosamente, o aplicativo ainda funciona muito bem no iPad, apesar desse aviso. No entanto, eu quero fazer as coisas da "maneira correta" o que isso significa neste caso. Quando eu troco a arquitetura de destino para o ARMV7, recebo erros de vinculação:
"___restore_vfp_d8_d15_regs", referenced from: *redacted* "___save_vfp_d8_d15_regs", referenced from: *redacted* ld: symbol(s) not found collect2: ld returned 1 exit status
As partes "redigidas" dos erros são referências à biblioteca estática à qual estou tentando vincular.
Aqui está o que eu tentei das muitas sugestões online. Cada um deles foi sugerido mais de uma vez sem nenhuma explicação, o que me leva a acreditar que ninguém entende esse problema:
"Nunca use o menu suspenso no canto superior esquerdo da janela Xcode para escolher o destino. Em vez disso, defina -o como baseado no SDK e, em seguida, o SDK base no iPhone OS 3.0 na configuração de destino. Defina o dispositivo de destino como seu destino preferido ( iPad, iPhone OS 3.2 na minha situação.) "
Isso produz o erro "Library não encontrado para -lcrt1.3.1.o"
"Certifique -se de que o GCC não esteja vinculando contra a versão errada da biblioteca padrão. (Você terá que garantir que a biblioteca_search_path não tenha o caminho errado.)" "
Minha biblioteca_search_path já está vazia, então isso não parece relevante.
"Tente compilar com o GCC 4.0 em vez do GCC 4.2."
Recebo um erro de sintaxe dentro de um arquivo de cabeçalho do UIKIT. O erro é "erro de sintaxe antes de 'at_name' token". A linha é "uikit_extern @interface uilocalizedIndexedCollation: nsObject".
Outro projeto compila muito bem com o mesmos configurações de destino, O que está realmente me fazendo questionar minha sanidade. Eu poderia estar lidando com um projeto Xcode corrupto?
Se alguém souber o que realmente está acontecendo e tem uma referência ou não se importa de explicá -lo, eu ficaria muito grato.
Felicidades!
Solução
O VFP entre o ARMV7 e o ARMV6 difere de várias maneiras. No ARMV7, geralmente é preferível usar néon. O problema é que sua biblioteca estática depende do VFP no ARMV6 - você precisa compilar a biblioteca no ARMV7 ou manter todo o aplicativo no ARMV6.
Voltar ao GCC 4.0 é bobo - o suporte do ARMV7 era basicamente inexistente naquela época, a menos que a Apple o tivesse apoiado.
Outras dicas
Eu tinha os mesmos erros, exceto que era para o ARMV6. Eu os corrigi desmarcando "Compile for Thumb" nas configurações do projeto para a biblioteca estática e o projeto principal.
No que diz respeito ao erro AT_Name, uma das possibilidades é verificar se você perder o @END em uma classe.
Para saber mais sobre o erro at_name, visite o seguinte link
http://iosdevelotips.com/xcode/error-syntox-error-wefore-at_name-token.html