2010-05-28 13 views
9

Ho costruito la mia libreria statica con componenti da riutilizzare nel mio progetto e di recente ho avuto bisogno di aggiornare un sacco di classi. Nello specifico, le firme di alcuni metodi sono state modificate a causa del fatto che alcune classi hanno cambiato nome.iPhone SDK errori di collegamento con la libreria statica

Cosa succede ora è che la libreria compila bene da solo, ma, se aggiunto ad un progetto di applicazione, il progetto non riesce a link:

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 cosa curiosa è che dopo un sacco di pulizie di progetto (sia nell'app che nei progetti lib), ho ancora lo stesso problema. Anche dopo aver iniziato un nuovo progetto, il problema è ancora lì.

Ho anche avuto cura di riavviare Xcode tra un clean e un build un paio di volte, ma non va bene.

Qualche idea su dove cercare?

risposta

6

Hai aggiunto la libreria come dipendenza al progetto? Vedi Xcode 3.1.1 and static libraries

Se si esegue il drill down sulla destinazione, il nome della libreria viene visualizzato nel gruppo "Collega binario con librerie"?

Controllare il log per l'output del compilatore/linker. Trova la chiamata al linker. La tua biblioteca appare nell'elenco delle librerie statiche per il collegamento?

+3

Grazie per la risposta! Sì, la libreria è una dipendenza per il progetto. Sì, il nome della libreria è nel gruppo "Collega binari con librerie". Sì, in effetti, la chiamata del linker è nella pastie sopra. – Nico

0

Ho appena riscontrato lo stesso errore del linker. Ho scoperto per tentativi ed errori che era perché stavo invocando isKindOfClass. Non sono sicuro del motivo per cui ciò causa il linker a barf, ma si spera che questa informazione aiuti.

La classe in questione, OrderItem, è figlio di NSManagedObject; in altre parole, è una classe di entità Core Data generata automaticamente.

In particolare, qui è stato l'errore di linker:

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

E qui è stato il codice incriminato:

- (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; 
    } 

mia soluzione era semplicemente omettere il test che garantisce 'oggetto' è un OrderItem. Il codice non è sicuro senza questo test, ma l'errore del linker è andato via. Sarei curioso di sapere se sto andando in questo test sbagliato, e forse c'è un modo migliore per farlo.

0

Ho appena scoperto che se si utilizza xcode 4 è necessario trascinare e rilasciare il progetto di libreria, quindi andare alle impostazioni di destinazione, quindi nella scheda di riepilogo in framework e librerie collegate aggiungere la libreria e terminare.

Spero che possa aiutare qualcuno.

2

Sì ho risolto questo errore ..Un grande grazie a @Shaggy Rana

errore

mi stava usando alcune classi di YouTube e il suo dandomi sotto l'errore

enter image description here

Soluzione

Abbiamo bisogno di aggiungere le Classi Lib a "Fonti del compilatore" nell'opzione "Fasi di costruzione".

  1. Vai fasi di creazione del Progetto e clicca su compilatore Fonti opzione (vedi sotto dello schermo). enter image description here

  2. quindi aggiungere le classi qui

ora fare il progetto Clean e andare per Genera.

Spero che aiuti :)

Problemi correlati