2014-01-31 2 views
8

Wo finde ich Dokumentation zu den Compiler-Flags und Linker-Flags, die wir für unsere iOS-Projekte in Xcode angeben können?Linker-Flags für iOS mit Xcode

Der Grund, warum ich mehr über die möglichen Flags an erster Stelle lesen möchte, ist, dass das Google Admob SDK sagt, wir müssen das Linker -Objc Flag setzen, während Facebook SDK schlägt vor, es für kleinere Binärdateien zu setzen. Also, ich habe mich gefragt, können wir Objc für eine bestimmte Bibliothek (Google Admob in diesem Fall) und haben es für eine andere Bibliothek (Facebook) gesetzt? Ich erwartete, in der Lage zu sein, eine man-Seite oder ein anderes Dokument zu finden, was die Compiler- und Linker-Optionen an erster Stelle sind, und zoom dann auf Objc. Es gibt Unmengen an Dokumentationen und Stackoverflow-Posts usw., um Linker-Flags in Xcode zu setzen. Was fehlt, ist eine Liste möglicher Linker-Flags, die wir setzen können und was sie jeweils bedeuten.

Überraschenderweise machte mich herum googlen ziemlich verwirrt, da gibt es Zeug auf clang, llvm, llvm-gcc usw. und LLVM site listet eine Reihe von llvm-Befehle, aber ich sehe nicht -Objc in einer der entsprechenden aufgeführt Seiten. Abgesehen von der Frage, ob der Compiler und der Linker clang oder llvm sind oder wie sie heißen, gibt es einen Ort, an den wir gehen könnten, um Dokumentation zu lesen, was Xcode zur Kompilierung und Verknüpfung von iOS-Projekten standardmäßig verwendet? (Sagen wir, sowohl Xcode 4.6 als auch Xcode 5.0.2, falls es verschiedene Doc-Sets gibt?) Danke!

+0

Siehe diese Antwort - http://stackoverflow.com/questions/6629979/what-does-the-objc-linker-flag-do –

+1

Danke, ich sah das auch. Ich frage jedoch, ob es einen allgemeineren Hinweis darauf gibt, welche Linker-Flags verfügbar sind und was sie bedeuten. – auspicious99

Antwort

10

Sie können versuchen man 1 ld. Für die -ObjC Flagge insbesondere die Beschreibung ist:

-ObjC Lädt alle Mitglieder der statischen Archivbibliotheken, die eine Objective-C-Klasse oder Kategorie implementieren .

EDIT

Für Ihre andere Frage über den AdMob-SDK und den Facebook-SDK, würde ich vorschlagen, die -ObjC den Linker-Flags und einen Blick auf this Artikel hinzufügen, die warum erklärt. Grundsätzlich schlägt Facebook vor, es nicht zu verwenden, da Ihre ausführbare Datei aufgrund des zusätzlichen Objektcodes, der in Ihre Binärdatei geladen wird, größer wird.

+2

@ auspicious99 ... und ebenfalls "man klingelt" für die Manpage des clang Compilers. Seien Sie vorsichtig, es gibt einen Compiler und eine Linker-Option 'ObjC' – CouchDeveloper

+0

Danke Ivan! Da ich nicht möchte, dass die Binärdatei unnötig größer wird, habe ich mich gefragt, ob ich sowas wie ObjC haben könnte, sondern nur für Admob. 'man 1 ld' enthüllt, dass '-force_load path_to_archive' möglicherweise das ist, was ich verwenden könnte. Werde das versuchen. – auspicious99

+0

Danke @CouchDeveloper! und danke, dass du darauf hingewiesen hast, dass clang eine eigene "Objc" -Option hat, die eine andere Bedeutung hat als die von ld. – auspicious99

0

Ich hatte dieses Problem, wenn ich eine Funktion in meine .hpp-Datei legte.

void logError(char const* szError) 
{ 
    ... 
} 

Ich musste in der Inline hinzufügen, damit es funktioniert.

inline void logError(char const* szError) 
{ 
    ... 
} 

Noch besser definieren Sie nicht Ihre Funktionen in Ihren Headern.