Wie erstellen Sie statische Bibliothek für iOS ohne alle Symbole, öffentlichkeit

Diese Frage wurde vorher gefragt, aber das Graben in der Dokumentation für die verschiedenen Entwicklungs-tools, die es scheint, wie diese ist möglich, nur eben nicht offensichtlich.

Motivation:
Machen Sie eine statische Bibliothek für die Nutzung durch andere iOS-Entwickler. Einige Symbole in der Bibliothek zu Problemen führen, wenn exportiert, so möchte ich, dass Sie ausschließlich interne Symbole. Mit der dynamischen Bibliothek dies ist einfach, benutzen Sie einfach -exported_symbols_list libtool (ld) argument und die Liste der diejenigen, die Sie wollen öffentlichkeit. libtool Dokumentation wird nicht zulassen, dass dieses argument für statische Bibliotheken.

Bibliothek hat mehrere ObjectiveC .m-Dateien, die code von anderen. Nur eine Klasse in der Gruppe muss öffentlich gemacht werden um die Benutzer des Finales .eine statische Bibliothek.

Versucht libtool -exported_symbols_list publicsymbols.exp aber das argument libtool wird nicht unterstützt mit -static für statische Bibliotheken.

Nicht machen das private Symbole mit Attributen (wenn, dass würde auch funktionieren), weil Sie erforderlich sind, von den anderen .m Dateien in der Gruppe.

sieht aus wie ld können mehrere .o-Dateien und verlinken Sie Sie in eine neue .o-Datei (über den -r argument) und das es nicht die "dynamische nur" Haftungsausschluss für den -exported_symbols_list argument (das könnte nur unklar, Dokumentation...).

nur als test Baue ich mein Projekt mit Xcode, so habe ich alle .o-Dateien aus, und dann versuchen, zu nennen ld auf den Befehl Linie, etwa so:

ld -r -x -all_load -static -arch armv6 -syslibroot {path} 
   -filelist /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCsdk.LinkFileList 
   -exported_symbols_list {exp file path} -o outputfile.o

wo die {path} geben Sie Dinge, die haben lange Wege zu den entsprechenden stellen in es.

aber ich bekomme Fehler wie den folgenden:

/usr/bin/ld_classic: /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCmain.o inkompatible Datei enthält nicht unterstützte Art von Abschnitt 3 (_TEXT,_picsymbolstub4) im load-Befehl 0 (angeben müssen, "- dynamisch" verwendet werden)

also irgendwas scheint da schief...

Jeder weiß, ein cleverer Weg, um diese Arbeit zu machen? Danke.

  • Welche Art von Symbolen müssen Sie sich verstecken?
  • Symbole, die in Konflikt geraten kann, wenn Sie die gleiche sub-Bibliothek bereits verbunden, die in Ihrer Anwendung (JSONkit sagen). Ich kann, natürlich, nur sind die JSONKit Dateien und sagen Sie auch, wenn Sie nicht bereits in Ihrem Projekt, aber ich hatte gehofft, für ein Einzelzimmer .h-Datei und .eine Datei, die Hinzugefügt werden, um das Projekt für eine saubere integration.
InformationsquelleAutor Dad | 2011-08-01
Schreibe einen Kommentar