2009-10-09 7 views
2

J'ai cherché pendant des heures mais je n'ai toujours aucune idée de ce qui ne va pas avec ma configuration. Mon projet utilise une bibliothèque auto-écrite (myLib). Cette bibliothèque est compilée pour fonctionner seulement pour simulateur et cela fonctionne parfaitement là.Bibliothèque iPhone: le fichier n'est pas de l'architecture requise

Qu'est-ce qui doit être modifié afin qu'il compile aussi pour mon périphérique iPhone?

Ceci est mon avertissement actuel:

ld: warning: in /.../myLib.a, file is not of required architecture 

Ceci est ma configuration (de myLib.a)

alt text http://i38.tinypic.com/kb4zdl.jpg

J'ai trouvé beaucoup d'articles expliquant la raison de cette erreur mais je impossible de trouver une solution:

Le simulateur fonctionne sur un x86 architecture, alors que l'appareil utilise une architecture ARM .


Que dois-je changer pour obtenir ma bibliothèque de travail sur mon iPhone?

Merci


Edit:

Ce que je l'ai fait jusqu'à présent:

  1. Nettoyé les deux projets
  2. Set bibliothèque 'périphérique' (3.1)
  3. a construit le bibliothèque
  4. Dra gged le fichier .a de ma bibliothèque dans mon application

Résultat:

Cela fonctionne dans le simulateur, mais le réglage de la sdk actif à l'appareil soulève encore une erreur file is not of required architecture. J'ai également essayé mahboudz (merci pour votre soutien) link. Il explique comment construire le projet en utilisant un script shell. Toutefois, XCode ne cesse de se plaindre que le fichier de la bibliothèque est de la mauvaise architecture et la construction échoue.

Cela doit être une erreur de débutant vraiment stupide.

+1

Quelle est la configuration de l'appli cation? – Mark

+0

L'application a la même configuration que la bibliothèque. (Je ne pouvais pas trouver de différence). De quelles informations supplémentaires avez-vous besoin? – jantimon

+1

lorsque vous apportez la bibliothèque dans votre nouvelle application, quel est l'emplacement source? – Elfred

Répondre

3

Vous devez ajouter les deux fichiers .a, celui construit pour le périphérique (build/config-iphoneos de $) et celui construit pour le sim (build/$ config-iphonesimulator) au nouveau projet. Assurez-vous de les nommer différemment avant de les déposer. C'est ainsi que l'admob et l'offre similaire expédient leurs bibliothèques statiques.

+0

Je ne peux pas le croire - ça marche! – jantimon

+0

Si vous êtes si incliné, vous pouvez utiliser lipo pour fusionner les deux fichiers dans un binaire universl – Elfred

1

Vous devez compiler votre bibliothèque pour Intel afin que le simulateur puisse l'utiliser (ce que vous avez déjà fait), puis le compiler pour ARM, afin qu'il fonctionne sur l'iPhone. Ensuite, vous devez fusionner les deux bibliothèques. Il y a différentes façons d'accomplir cela ou de le rendre plus automatique.

Voici quelques liens pour vous aider:

http://blog.stormyprods.com/2008/11/using-static-libraries-with-iphone-sdk.html http://www.clintharris.net/2009/iphone-app-shared-libraries/

+0

"6) Construisez votre nouvelle bibliothèque statique pour toutes les cibles du SDK (comme un simulateur, un périphérique iPhone, etc.)." De votre premier lien est mon problème. Je ne sais pas comment faire ça. – jantimon

+0

Votre deuxième lien est à propos de sth similaire mais pas de libarys statiques. (En dehors du lien vers le blog stormyprods) – jantimon

+0

Dans le menu Projet, que dit votre SDK actif? – mahboudz

0

J'ai rencontré le même problème aussi. Mais vous n'avez pas besoin de faire glisser deux fichiers .a dans le projet de l'application pour résoudre ce problème. Voilà ce que je l'ai fait:

  1. Faites glisser le projet de bibliothèque statique dans le groupe cadre d'application projet
  2. « Get Info » pour la cible dans l'application projet
  3. Définir la dépendance directe de la bibliothèque statique
  4. make clean tous les inutiles builds (par exemple la construction de simulateur) dans le projet de bibliothèque statique
  5. construire dans le projet app
Questions connexes