2010-06-29 17 views
6

J'ai récemment mis à jour vers iPhone SDK 4.0 et ne suis plus en mesure de construire mon projet pour le simulateur iPhone. Le problème est que les classes d'un de mes propres bibliothèques ne peuvent plus être trouvées par ld:Erreur lieur (seul simulateur) avec sa propre bibliothèque après la mise à jour vers l'iPhone SDK 4.0

"_OBJC_CLASS_$_Book", referenced from: 
    objc-class-ref-to-Book in Category.o 
    (maybe you meant: ...) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

J'ai déjà lu d'autres messages sur des problèmes similaires, comme par exemple here. "Malheureusement", mon problème n'a rien à voir avec un framework SDK, mais avec ma propre bibliothèque, donc les solutions mentionnées ici ne sont pas applicables ici. La bibliothèque est incluse sous "Link Binary With Libraries" de ma cible, les chemins de recherche de bibliothèque sont corrects (vérifiés avec XCode et avec un éditeur de texte brut directement dans mon fichier de projet) et correctement ajoutés à la commande gcc. J'utilise iPhone Simulator 3.2 comme base SDK, mais le même problème se produit avec SDK 4.0. Encore une fois, cela fonctionne avec la cible de mon périphérique mais pas avec ma cible de simulateur. Il a travaillé avec les deux, cependant, avant de mettre à jour de l'iPhone SDK 3.2 à 4.0. J'ai également été capable de reproduire cette erreur en créant un nouveau projet avec un seul fichier et la bibliothèque liée. Cependant, le lib devrait être bon car il a fonctionné avec le simulateur 3.2 avant que j'ai mis à jour XCode et mon SDK.

Plus Faits: Mac OS X 10.6.3, XCode 3.2.3 64 bits, iPhone OS 3.2, GCC 4.2

Toute aide serait très appréciée.


EDIT:

Après la réinstallation SDK 3.2, tout a fonctionné comme prévu à nouveau. Il est à noter que les SDK du dossier /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs sont écrasés à chaque installation. J'ai ensuite essayé de réinstaller SDK 4.0 à nouveau et la même erreur que ci-dessus s'est produite. Je n'ai rien changé dans mon projet et j'ai toujours utilisé 3.2 comme SDK de base.

Le problème peut donc éventuellement être réduit aux options suivantes:

  • Apple a changé STH. dans le Simulator SDK 3.2 qui provoque le problème
  • une modification de XCode 3.2.3 provoque le problème
  • indicateurs de compilateur faux/manquants lors de la construction de ma propre bibliothèque (ces indicateurs, cependant, ne poseraient problème qu'avec un SDK modifié ou l'IDE a changé)

je l'ai fait aussi un diff dossier sur /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk pour l'ancienne et la nouvelle version de ce dossier. Il s'est avéré qu'il y a en fait des changements mineurs dans le "même" SDK. Je pense toujours que c'est un problème d'indicateur IDE/compilateur, cependant.

Quelqu'un a des idées? Je ne veux pas coller à 3.2 pour toujours ...

+0

J'ai eu le même problème. Mystérieusement, cela ne s'est produit que pour la version "Release" mais pas pour la version "Debug", même si je n'ai rien changé après la mise à jour du SDK 4.0. Cependant, je n'ai pas encore examiné cela. – Stiefel

Répondre

1

J'ai finalement pu déterminer quels drapeaux manquaient dans mon appel de compilateur pour construire ma librairie. Donc, pour répondre à ma question: Si quelqu'un a des problèmes reliant sa propre lib statique à une cible dans XCode 3.2.3 (en utilisant iPhoneSimulator3.2.sdk ou iPhoneSimulator4.0.sdk), vous devez construire votre lib avec les deux drapeaux suivants:

-fobjc-abi-version = 2

-fobjc-legacy-expédition

Merci encore à PhoneyDeveloper pour his hints.

1

Assurez-vous que vous recompilez vos bibliothèques avec le même SDK de base que vous utilisez pour votre application.

+0

Merci pour votre réponse. J'utilise le même SDK de base, donc cela ne semble pas être le problème. Comme suggéré dans un autre forum (http://forums.macrumors.com/showthread.php?t=956090), j'ai construit ma lib avec XCode au lieu de la ligne de commande et cela a fonctionné. Bien que j'aie ensuite utilisé les mêmes drapeaux de gcc avec la ligne de commande et le XCode, la lib construite manuellement ne fonctionnera toujours pas avec mon application ... – Flo

0

Une autre pensée-cela m'est arrivé dans le passé, même lorsque les bibliothèques n'étaient pas impliqués.

Vérifiez que vous n'avez pas importé de fichiers à l'aide de l'option 'références de dossier de groupe'. Il semble que cela donne un mal de tête à Xcode. (J'ai au moins fait cela dans mon cas.)

0

J'ai été résolu ceci quand j'ai enlevé des drapeaux comme (-ObjC, -all_load) sous 'Other Linker Flags' que j'utilisais dans le projet.il y avait un conflit -all_load .