2009-03-08 5 views
7

Sto scrivendo una libreria statica per iPhone e mi chiedo se quello che sto facendo è raccomandato o se dovrei adottare un approccio diverso.Modo corretto per collegarsi alle librerie dalle librerie per l'iPhone/CocoaTouch

La libreria statica che sto scrivendo dipende da libxml2. libxml2 ha una libreria dinamica (dylib) e una libreria statica (a). Ho provato due approcci.

Approccio uno - Quando si tenta di collegarsi verso la libreria statica con l'aggiunta di "-lxml2" alla voce "Altre bandiere linker" la generazione non riesce con il seguente messaggio:

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library) 

approccio in due - posso collegare con successo contro la libreria dinamica dalla mia libreria statica, ma non sono sicuro se questo è consentito (o l'approccio corretto) su iPhone. Anche se sto costruendo una libreria statica, Apple consente le librerie statiche che si collegano alle librerie dinamiche? Sto ancora imparando sulle librerie statiche, ma dalla mia comprensione il codice del dylib sarebbe stato combinato con il mio codice per creare una libreria, quindi il collegamento con il dylib non dovrebbe essere un problema.

In sintesi: [? Builds, ma questo è corretto ed accettabile]

  • mylibrary.a - -> libxml2.a [Non funziona]
  • mylibrary.a> libxml2.dylib

risposta

-8

Apple non consente di collegare framework e/o librerie diversi da quelli forniti con l'SDK.

Marco

+1

In realtà, XCode lo rende perfetto. Più in astratto, però, StackOverflow dovrebbe essere un posto dove trovare rapidamente * la risposta corretta *! Se non lo sai, o non sei sicuro, ti preghiamo di non postare come risposta. Chiedi chiarimenti alle domande nei commenti o fai qualche ricerca finché * non * conosci la risposta corretta! :) – Olie

8

libxml2.dylib è disponibile nel SDK. Il modo a destra è modo è fare doppio clic sul nodo/applicazione di destinazione in Xcode e quindi in Generale fare clic su + in "Biblioteche collegate" ... si dovrebbe trovare libxml2.dylib in tale elenco.

0:42 in questo Screencast è possibile vedere come CoreGraphics viene aggiunto a un progetto.

+0

Giusto. Capisco * come * collegare. La mia domanda era: è lo standard appropriato per il collegamento a librerie esterne da librerie statiche? Tu fai un buon punto, uno che trascuravo. Libxml2.dylib è distribuito con l'SDK, quindi è probabilmente consentito. – Caged

+1

Consiglierei di non collegarmi con librerie statiche di dylibs disponibili da SDK. Possono essere utilizzati da altri framework e si potrebbero verificare problemi di versione, ad esempio Foundation.framework fa pull in libxml2 – epatel

0

Non è possibile collegare staticamente le librerie ad altre librerie statiche. Questo è il motivo per cui i framework e le librerie che dipendono da altre librerie statiche richiedono al consumatore di aggiungerli manualmente alla loro configurazione di build Link Binary With Libraries o Other Linker Flags.