2010-05-28 3 views
9

J'ai construit ma propre bibliothèque statique avec des composants à réutiliser dans mon projet, et j'ai récemment eu besoin de mettre à jour un tas de classes. Plus précisément, certaines signatures de méthodes ont été modifiées en raison du fait que certaines classes ont changé de nom.Erreurs de liaison du SDK iPhone avec la bibliothèque statique

Qu'est-ce qui se passe maintenant est que la bibliothèque compile bien sur lui-même, mais, lorsqu'il est ajouté à un projet d'application, le projet ne lien:

Ld build/Sucursales.build/Debug-iphoneos/Sucursales.build/Objects-normal/armv6/Sucursales normal armv6 
cd /Users/nameghino/src/Sucursales 
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1 
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.2.sdk -L/Users/nameghino/src/Sucursales/build/Debug-iphoneos -L/Users/nameghino/src/Sucursales/../../Library/MyLibraries/MSSharedLibrary-1.0.0 -F/Users/nameghino/src/Sucursales/build/Debug-iphoneos -filelist /Users/nameghino/src/Sucursales/build/Sucursales.build/Debug-iphoneos/Sucursales.build/Objects-normal/armv6/Sucursales.LinkFileList -dead_strip -lxml2 -ObjC -all_load -miphoneos-version-min=3.1 -framework Foundation -framework UIKit -framework CoreGraphics -lsqlite3.0 -framework CoreLocation -framework MapKit -lxml2 /Users/nameghino/src/MSSharedComponents/Frameworks/MSSharedLibrary/build/Debug-iphoneos/libMSSharedLibrary.a -o /Users/nameghino/src/Sucursales/build/Sucursales.build/Debug-iphoneos/Sucursales.build/Objects-normal/armv6/Sucursales 

Undefined symbols: 
    "_OBJC_CLASS_$_DataCatalogService_GetSingleRow", referenced from: 
     objc-class-ref-to-DataCatalogService_GetSingleRow in libMSSharedLibrary.a(MSDataCatalogSpecification.o) 
    **"_OBJC_CLASS_$_DataCatalogService_ArrayOfString", referenced from: 
     objc-class-ref-to-DataCatalogService_ArrayOfString in libMSSharedLibrary.a(MSDataCatalogSpecification.o) 
    "_OBJC_CLASS_$_DataCatalogService_GetSingleRowResponse", referenced from: 
     objc-class-ref-to-DataCatalogService_GetSingleRowResponse in libMSSharedLibrary.a(MSSingleRowResultsParser.o) 
    "_OBJC_CLASS_$_DataCatalogService_GetMultiRowResponse", referenced from: 
     objc-class-ref-to-DataCatalogService_GetMultiRowResponse in libMSSharedLibrary.a(MSMultiRowResultsParser.o) 
    "_OBJC_CLASS_$_DataCatalogService_GetMultiRow", referenced from: 
     objc-class-ref-to-DataCatalogService_GetMultiRow in libMSSharedLibrary.a(MSDataCatalogSpecification.o) 
    "_OBJC_CLASS_$_DataCatalogService_HelloWorldResponse", referenced from: 
     objc-class-ref-to-DataCatalogService_HelloWorldResponse in libMSSharedLibrary.a(DataCatalogService.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status** 

La chose curieuse est que, après beaucoup de nettoyages de projet (à la fois dans l'application et les projets lib), je reçois toujours le même problème. Même après avoir démarré un nouveau projet, le problème est toujours là.

J'ai également pris soin de redémarrer Xcode entre un nettoyage et une construction à quelques reprises, mais pas bon.

Des idées sur où chercher?

Répondre

6

Avez-vous ajouté la bibliothèque en tant que dépendance au projet? Voir Xcode 3.1.1 and static libraries

Si vous explorez votre cible, le nom de la bibliothèque apparaît-il dans le groupe "Lier le binaire avec les bibliothèques"? Consultez le journal de la sortie du compilateur/éditeur de liens dans le journal. Trouver l'appel à l'éditeur de liens. Votre bibliothèque apparaît-elle dans la liste des bibliothèques statiques à lier?

+3

Merci pour votre réponse! Oui, la bibliothèque est une dépendance pour le projet. Oui, le nom de la bibliothèque se trouve dans le groupe "Lier les binaires avec les bibliothèques". Oui, en fait, l'appel de l'éditeur de liens est dans le pastie ci-dessus. – Nico

0

Je viens de rencontrer la même erreur de l'éditeur de liens. J'ai découvert par essais et erreurs que c'était parce que j'appelais isKindOfClass. Je ne suis pas sûr pourquoi cela provoque l'éditeur de liens, mais j'espère que cette information est utile.

La classe en question, OrderItem, est un enfant de NSManagedObject; En d'autres termes, il s'agit d'une classe d'entités Core Data générée automatiquement.

Plus précisément, ici était l'erreur d'éditeur de liens:

"_OBJC_CLASS_$_OrderItem", referenced from: 
objc-class-ref-to-OrderItem in libmyStaticLib.a(MyTableViewController.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Et voici le code incriminé:

- (void)handleButtonTapWithObject:(id)object 
{ 
    // This must be an OrderItem or else we don't want to touch it: 
    if (NO == [object isKindOfClass:[OrderItem class]]) // <-- OFFENDING CODE 
    { 
     NSLog(@"Object parameter is of unexpected type."); 
     return; 
    } 

Ma solution était tout simplement d'omettre le test qui assure 'objet' est un OrderItem. Le code n'est pas aussi sécurisé sans ce test, mais l'erreur de l'éditeur de liens a disparu. Je serais curieux de savoir si je vais mal à ce test et peut-être qu'il existe une meilleure façon de procéder.

0

Je viens de trouver si vous utilisez xcode 4 vous devez faire glisser et déposer le projet de bibliothèque, puis accédez à vos paramètres cible, puis dans l'onglet résumé dans les frameworks et bibliothèques liés ajouter votre bibliothèque et fait.

Espérons que cela aidera quelqu'un.

2

Oui j'ai résolu cette erreur ..Un grand Merci à @Shaggy Frog

Erreur

J'utilisait certaines classes YouTube et son erreur me donner ci-dessous

enter image description here

Solution

Nous devons ajouter les Classes Lib aux "Sources du compilateur" dans l'option "Construire les Phases".

  1. Aller à Phases de compilation et cliquez sur l'option Sources du compilateur du projet (voir ci-dessous l'écran). enter image description here

  2. Ajouter ensuite les classes ici

font maintenant propre projet et Go BUILD.

Espérons que ça aide :)

Questions connexes