2016-04-16 21 views
0

Ich bin ein dynamisches Framework für iOS erstellen. Es benötigt einige Symbole aus Code oder anderen Bibliotheken, aber ich möchte sie nicht in das Framework einbinden.Xcode Clang-Link: Build Dynamic Framework (oder Dylib) nicht einbetten Abhängigkeiten

Dies kann erreicht werden, wenn Sie eine statische Bibliothek erstellen, richten Sie einfach den Suchpfad ein und stellen Sie sicher, dass sie nicht in den Build-Phasen des Ziels enthalten sind.

Aber wenn ein dynamisches Framework oder Dylib erstellen, dieses Ergebnis undefiniert Symbol Fehler. Ich habe alle möglichen Verbindungsoptionen ausprobiert, zB -l-weak_library-weak_framework-I-rpath-rpath-link. Aber keiner funktioniert.

Der Link-Befehl sieht wie folgt aus:

clang -arch x86_64 -dynamiclib 
    -isysroot *iPhone_SDK_PATH* 
    *OPTIONS_NOT_IMPORTANT* 
    -install_name @rpath/Foo.framework/Foo 
    -Xlinker -rpath -Xlinker @executable_path/Frameworks 
    -Xlinker -rpath -Xlinker @loader_path/Frameworks 
    -Xlinker -rpath -Xlinker *BUILD_PATH* 
    -mios-simulator-version-min=7.0 
    -Xlinker -no_deduplicate 
    -Xlinker -objc_abi_version 
    -Xlinker 2 
    -fobjc-arc -fobjc-link-runtime 
    -framework Foundation 
    -single_module 
    -compatibility_version 1 
    -current_version 1 
    -Xlinker -dependency_info 
    -Xlinker *BUILD_PATH*/Foo.build/Objects-normal/x86_64/Foo_dependency_info.dat 
    -o *BUILD_PATH*/Foo.framework/Foo 

Antwort

0

Klirren Verwendung ld Befehl das letzte Glied zu machen, ich das Handbuch geprüft und gefunden -U und -undefined undefinierte Symbole ignorieren können.

-U symbol_name

angegeben, dass es in Ordnung ist für symbol_name keine Definition zu haben. Mit two_levelnamespace wird das resultierende Symbol als dynamic_lookup markiert, was bedeutet, dass dyld alle geladenen Bilder durchsucht.

-undefined Behandlung

Gibt an, wie undefinierte Symbole behandelt werden. Optionen sind: error, warning, suppress oder dynamic_lookup. Der Standardwert ist ein Fehler.

So ist die endgültige Lösung wird -Wl,-undefined,dynamic_lookup-OTHER_LDFLAGS gesetzt, auch sicher, dass Suchpfad korrekt eingestellt werden. Es klappt.