2010-05-10 14 views
5

J'ai déjà passé d'innombrables heures à réfléchir à ce sujet, en utilisant les recherches Google et d'autres questions Stack Overflow en vain.Erreur de liaison XCode lors du ciblage armv7

J'ai une application universelle iPhone/iPad, qui semble bien se compiler lorsque la cible est armv6. Cependant, lorsque l'appareil est iPad, je reçois cet avertissement:

 
warning: building for SDK 'Device - iPhone OS 3.2' requires an armv7 architecture. 

Étrangement, l'application fonctionne toujours aussi bien sur iPad malgré cet avertissement. Cependant, je veux faire les choses de la «bonne manière», ce que cela signifie dans ce cas. Lorsque je passe l'architecture cible à ARMv7, je me relier des erreurs:

 
    "___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 

Les parties « caviardées » des erreurs sont des références à la bibliothèque statique à laquelle je suis en train de créer un lien.

Voici ce que j'ai essayé parmi les nombreuses suggestions en ligne. Chacun d'entre eux ont été proposés plus d'une fois, sans aucune explication, ce qui me porte à croire que personne ne comprend tout à fait ce problème.

« Ne jamais utiliser le menu déroulant en haut à gauche de la fenêtre de XCode pour choisir la cible au lieu , réglez ce SDK de base et le kit de développement de base à l'iPhone OS 3.0 dans la configuration cible. définir le périphérique cible à votre cible préférée (iPad, iPhone OS 3.2 dans ma situation.) »

cela donne l'erreur "Bibliothèque introuvable pour -lcrt1.3.1.o"

"Assurez-vous que GCC ne crée pas de liens avec la mauvaise version de la bibliothèque standard. (Vous devrez vous assurer que le LIBRARY_SEARCH_PATH ne pas le mauvais chemin en elle.) «

Mon LIBRARY_SEARCH_PATH est déjà vide, donc cela ne semble pas pertinent.

» Essayez la compilation avec GCC 4.0 plutôt que GCC 4.2 «

Je reçois une erreur de syntaxe dans un fichier d'en-tête UIKit L'erreur est. « erreur de syntaxe avant jeton « AT_NAME » » La ligne est » UIKIT_EXTERN @interface UILocalizedIndexedCollation:.. NSObject "

Un autre projet compile très bien avec les mêmes paramètres cibles , ce qui me fait vraiment douter de ma santé mentale. Pourrais-je avoir affaire à un projet XCode corrompu?

Si quelqu'un sait ce qui se passe réellement et a une référence ou n'aime pas l'expliquer, je serais très reconnaissant.

À la votre! VFP entre ARMv7 et ARMv6 diffère de différentes manières.

+1

Quelles architectures sont combinées dans la bibliothèque? Vous pouvez le trouver avec la commande de fichier, par ex. "fichier libfoo.a". – Crufty

Répondre

4

Dans ARMv7, il est généralement préférable d'utiliser NEON. Le problème est que votre bibliothèque statique dépend de VFP dans ARMv6 - vous devez soit compiler la bibliothèque à ARMv7 ou conserver l'ensemble de l'application à ARMv6.

Revenir à GCC 4.0 est stupide: le support ARMv7 était pratiquement inexistant à l'époque, à moins qu'Apple ne l'ait rétroporté.

+0

Merci pour l'info, et je suis d'accord sur la chose GCC 4.0. Les différences VFP expliqueraient ce qui se passe. La chose étrange est, les exemples d'applications qui viennent avec la bibliothèque compilent très bien (et ont même les mêmes paramètres.) Il peut y avoir une sorte de dépendance snafu dans le projet xcode qui génère les erreurs de liaison. – Tom

+0

Wow - merci beaucoup. J'ai perdu des heures et vous m'avez sauvé des heures de plus. – Mups

1

J'ai eu les mêmes erreurs sauf qu'il était pour ARMv6. Je les ai corrigés en décochant "Compiler pour le pouce" dans les paramètres du projet pour la bibliothèque statique et le projet principal.