2012-08-06 3 views
21

Ich habe eine Bibliothek, die unter XCode 4.4 ein paar Linker Warnungen zu werfen begann. Die Warnungen sind entlang der Linien von "ld: Warnung: Instanzmethode" Methodenname: 'in der Kategorie von überschreibt Methode von der Klasse in "unterdrücken Instanzmethode überschreiben Linker Warnung Rahmen xcode

Das Rahmenwerk arbeitet noch gut, und ich nehme an, dass die Firma, die es schrieb, dieses im nächste Version, aber vorläufig sind diese Warnungen sehr ärgerlich. Gibt es eine Möglichkeit, sie zu deaktivieren, ohne alle Linker-Warnungen zu deaktivieren?

+0

Was bedeutet die Warnung? – trojanfoe

+0

Ich denke, es bedeutet, dass die Leute, die die Bibliothek gemacht haben, einige Dinge unpassend gemacht haben. Scheint nichts zu kaputt zu machen, aber der Linker ist ein bisschen weh, was nervig ist, da ich es nicht reparieren kann, weil es eine geschlossene Quelle ist. – ima747

+0

Haben Sie eine Methode in Ihrer Klasse erstellt/benannt, genau wie eine andere Methode in der anderen Klasse? – Hexark

Antwort

13

Es gibt zwei Optionen, die ich gekommen sind, sich mit von Flags "Andere Linker Flags" in der Xc Hinzufügen ode build Einstellungsbereich:

1) -Xlinker -w Hinzufügen wird alle Linker Warnungen unterdrücken, unabhängig von der Art (das ist die -w Flag auf ld (1)). Das wird natürlich diese Warnung, aber auch alle anderen Warnungen leiser machen.

2) Durch Hinzufügen von -Xlinker -no_objc_category_merging wird der Optimierungsschritt übersprungen, bei dem der Linker während des Verknüpfens alle Kategoriemethoden in die Basisklasse einbindet, die dann zur Laufzeit auftreten würde. Tiny Bit beim Start wahrscheinlich langsamer, aber es wäre wahrscheinlich immer noch schneller als Methode zur Laufzeit swizzling, und da es in diesem Schritt ist, dass ld (1) die Warnung ausgibt, wird es auch überspringen.

Es scheint, dass ld keine Möglichkeit hat, jede einzelne Warnung chirurgisch so zu unterdrücken, wie der Compiler es tut, obwohl es Spezialflags für einige von ihnen oder Gruppen von ihnen hat (von denen keine mit diesem helfen). Keine der obigen Lösungen wird wahrscheinlich für den Produktionscode empfohlen, aber in einigen Situationen könnte der eine oder andere helfen.

+0

thank. Du hast meinen Tag gerettet – larva

1

Wenn eine Option für diese Warnung versteckt vorhanden wäre es unter sein:

Project Navigator (die Dateiliste auf der linken Seite) -> [Projektname] (das mit dem blauen Symbol) -> Einstellungen Bauen -> Apple-LLVM Compiler 3.1 - Warnungen

auch:

In Xcode, how to suppress all warnings in specific source files?

+2

Danke dafür. Es gibt keine Warnungen in den compiler-Abschnitten, die spezifisch für Bibliotheken oder die bestimmten Warnungen sind, die ich sehe. Ich könnte alle Warnungen abstellen, aber das ist ausdrücklich das, was ich vermeiden möchte. Der andere referenzierte Post ist auch für die Dateien, die kompiliert werden, aber Bibliotheken und Header werden dort nicht angezeigt, so dass es keine Möglichkeit gibt, Flags speziell für sie zu setzen. Ich muss annehmen, dass es keine Möglichkeit gibt, die Warnung in xcode zu deaktivieren, da sie aus der Bibliothek stammt. – ima747

+0

Das ist ein schlechter Ratschlag. Ich glaube, es gibt viele klingelnde Warnungen, die keine Kontrollkästchen in der Benutzeroberfläche für Buildeinstellungen haben. Im Allgemeinen wird durch das Festlegen einer bestimmten Option "-W" in der Datei dieses Problem während der Kompilierung behoben. Setzen Sie die Option '-fdiagnostics-show-option' auf eine Datei und clang sagt Ihnen, welches' -W' zu verwenden ist. In diesem speziellen Fall wird dies nicht funktionieren, weil die Frage von OP über den Linker ** und nicht über den Compiler steht. – paulmelnikow

+0

Eine andere Lösung, wiederum für den Compiler und nicht für den Linker, sind Diagnose-Pragmas: http://clang.llvm.org/docs/UsersManual.html # controlling-diagnostics-via-pragmas – paulmelnikow