2009-03-08 10 views
7

Ich schreibe eine statische Bibliothek für das iPhone und ich frage mich, ob das, was ich tue, empfohlen wird oder ob ich einen anderen Ansatz wählen sollte.Korrekter Weg, um Bibliotheken aus Bibliotheken für das iPhone/CocoaTouch zu verknüpfen

Die statische Bibliothek, die ich schreibe, ist abhängig von libxml2. libxml2 hat eine dynamische Bibliothek (dylib) und eine statische Bibliothek (a). Ich habe zwei Ansätze ausprobiert.

Ansatz ein - Wenn ich gegen die statische Bibliothek zu verknüpfen versuchen, durch „-lxml2“ auf „Andere Linker-Flags“ die Erstellung fehl mit der folgenden Meldung hinzufügen:

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

Ansatz zwei - kann ich erfolgreich verknüpfen gegen die dynamische Bibliothek von meiner statischen Bibliothek, aber ich bin nicht sicher, ob dies (oder der richtige Ansatz) auf dem iPhone erlaubt ist. Obwohl Apple eine statische Bibliothek erstellt, erlaubt Apple statische Bibliotheken, die mit dynamischen Bibliotheken verknüpft sind? Ich lerne immer noch über statische Bibliotheken, aber nach meinem Verständnis würde der Code von der Dylib mit meinem Code kombiniert werden, um eine Bibliothek zu erstellen, daher sollte die Verknüpfung mit der Dylib kein Problem darstellen.

Fassen wir zusammen: [? Baut, aber ist das richtig und akzeptabel]

  • mylibrary.a - -> libxml2.a [Funktioniert nicht]
  • mylibrary.a> libxml2.dylib

Antwort

-8

Mit Apple können Sie keine anderen Frameworks und/oder Bibliotheken als die mit dem SDK bereitgestellten verknüpfen.

Marco

+1

Eigentlich erlaubt XCode das ganz gut. Mehr im Abstrakten sollte StackOverflow jedoch ein Ort sein, an dem Sie schnell und einfach * die richtige * Antwort finden! Wenn Sie nicht wissen, oder Sie nicht sicher sind, bitte posten Sie nicht als Antwort. Stellen Sie in Fragen Klärungsfragen, oder recherchieren Sie, bis Sie die richtige Antwort * wissen *! :) – Olie

8

libxml2.dylib ist im SDK zur Verfügung. Die rechts Weg ist, doppelklicken Sie auf den Zielknoten/app in Xcode und dann unter General klicken Sie auf + unter "Linked Libraries" ... Sie sollten libxml2.dylib in dieser Liste finden.

0:42 In diesem Screencast können Sie sehen, wie CoreGraphics zu einem Projekt hinzugefügt wird.

+0

Rechts. Ich verstehe * wie * zu verknüpfen. Meine Frage war, ist es der richtige Standard für die Verknüpfung mit externen Bibliotheken aus statischen Bibliotheken? Du machst aber einen guten Punkt, den ich irgendwie übersehen habe. Die libxml2.dylib wird mit dem SDK verteilt, ist also wahrscheinlich erlaubt. – Caged

+1

Ich würde empfehlen, nicht mit statischen Bibliotheken von Dylibs zu verbinden, die über das SDK verfügbar sind. Sie können von einem anderen Framework verwendet werden, und Sie könnten Probleme mit der Version bekommen, also sagen Sie, Foundation.framework zieht libxml2 ein – epatel

0

Sie können Bibliotheken nicht statisch mit anderen statischen Bibliotheken verknüpfen. Das ist der Grund, warum Frameworks und Bibliotheken, die von anderen statischen Bibliotheken abhängig sind, den Benutzer auffordern, sie manuell ihrer Build-Binary mit Bibliotheken-Build-Phase oder den Build-Einstellungen für andere Linker-Flags hinzuzufügen.