Ich baue einige Befehlszeilen-Dienstprogramme in Xcode (plain C, keine Cocoa). Ich möchte, dass alle von ihnen meine angepasste Version von libpng verwenden, und ich möchte Platz sparen, indem Sie eine Kopie der Bibliothek unter allen ausführbaren Dateien teilen (ich habe nichts dagegen, neu zu verteilen .dylib
mit ihnen).
Muss ich etwas zaubern, um libpng-Export-Symbole zu erhalten?
Hat "Binär mit Bibliotheken verknüpfen" Phasenverknüpfung statisch aufbauen?
Apples Dokumentationen erwähnen das Laden von Bibliotheken zur Laufzeit mit dlopen
Aber wie kann ich Xcode dazu bringen, eine ausführbare Datei zu erstellen, ohne sich über fehlende Symbole zu beschweren?
Ich glaube, ich habe es herausgefunden:
-
libpng wurde nicht richtig gelinkt, weil ich 32/64-Bit-Programme und eine 32-Bit-Bibliothek erstellt habe. Die Build-Einstellungen der Bibliothek und der ausführbaren Dateien müssen übereinstimmen.
-
libpng's config.h muss tonnenweise Defines haben wie
#define FEATURE_XXX_SUPPORTED
-
"Binär mit Bibliotheken verknüpfen" Build-Phase kommt mit dynamischen Bibliotheken gut zurecht, und
DYLD_FALLBACK_LIBRARY_PATH
Umgebungsvariable ist zum Laden erforderlich.dylib
s aus dem Anwendungsbündel.