webentwicklung-frage-antwort-db.com.de

doppelte Symbole für die Architektur i386 klingeln

Ich habe mehrere Posts auf Google und Stackoverflow gesehen, die mit diesem Fehler zusammenhängen. Ich habe alle gelesen, aber immer noch das Problem geholt. Ich freue mich über eine Lösung. Hier ist die Fehlermeldung, die ich beim Kompilieren erhalte ...

verzeichnis für Option '-L/Users/somefolder/Documents/Bharat/MyApp copy/GoogleAdMobAdsSDK' nicht gefunden Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

Vielen Dank.

56
Bharat

Endlich habe ich die Lösung -

  1. entfernen Sie alle Verweise auf AdMob SDK, die ich hinzugefügt habe (auch aus dem Arbeitsbereich löschen).
  2. bereinigen Sie Ihr Projekt
  3. Folgen Sie diesem Link, um erneut AdMob hinzuzufügen
  4. reinigen und wieder aufbauen
2
Bharat

Ein weiterer Grund, warum dieser Fehler häufig auftritt, ist das versehentliche Importieren der .m-Datei anstelle der .h-Datei.

234
Rik Smith-Unna

Schritte:

  1. Überprüfen Sie die Build-Phasen in den Zieleinstellungen.
  2. Überprüfen Sie, ob eine Datei zweimal oder einmal vorhanden ist.
  3. Wenn die Datei zweimal existiert, löschen Sie eine. Wenn nicht, löschen Sie die Datei unten, die die neueste ist.
  4. Baue wieder.
57
Desparado_

Nur um die möglichen Lösungen zu ergänzen.

In meinem Fall hatte ich versehentlich eine Variable in einer Header-Datei deklariert und initialisiert.

Zum Beispiel ist das falsch:

MyFile.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant = 6;

Es sollte sein:

MyFile.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant;

MyFile.m

#import "MyFile.h"

NSInteger const ABCMyConstant = 6;
25
KyleT

Gehen Sie zu Build Setting und suchen Sie nach No Common Blocks und setzen Sie es NO . Und wenn Sie es erneut erstellen, wird dieser Fehler nicht erneut angezeigt.

20

Ich habe festgestellt, dass ich den Fehler erhalten habe, als ich ein const in einer .m-Datei mit demselben Namen wie ein anderes const in einer anderen .m-Datei deklariert hatte. Beide Dateien enthielten dieselbe übergeordnete Datei.

11
reza23

Dies habe ich erst nach der Neuerstellung einer Modellklasse für Core Data erlebt. Mit der Menüoption zum Erstellen von Objektklassen wurde eine doppelte Modellklasse erstellt. Sobald ich die Dupe entfernt habe, ist der Fehler verschwunden ...

8
jimmyb

Linker-Fehler weisen immer auf Probleme bei der Bibliotheksnutzung oder beim Import hin.

Manchmal tritt der Fehler auf, wenn Sie eine .m-Datei anstelle einer .h-Datei importiert haben.

Bitte überprüfen Sie Ihren Code und suchen Sie nach einer .m-Importanweisung in einer Ihrer Header-Dateien (Erweiterung .h). Ich hatte ein ähnliches Problem und 14 doppelte Symbolfehler.

Überprüfen Sie, ob Sie ViewControler.m Anstelle von .h importiert haben. So muss es also sein:

    import "ViewController.h"

und dein AppDelegate.h sollte ungefähr so ​​aussehen:

import "UIKit/UIKit.h"
import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) ViewController *mainController;
@end

Denken Sie immer daran, keine .m-Headerdateien zu importieren

7
Iman

Ich hatte dieses Problem mit einem Framework, von dem ich wusste, dass es in einem anderen Projekt funktioniert. Ich hatte die Dateien aus dem anderen Projekt kopiert und zu diesem hinzugefügt. Dann habe ich beim Bauen 76 doppelte Fehler bekommen.

Die einfache Lösung für mich war das Entfernen von -ObjC von anderen Linker Flags. Das vorherige Projekt hatte das nicht. Nachdem ich das getan hatte, verschwand die Warnung und das Projekt wurde erfolgreich erstellt.

4
Storm Factory

Wenn andere Leute alle anderen Antworten ausprobiert haben und es immer noch nicht funktioniert, versuchen Sie, die Datei .xcodeproj mit Ihrem bevorzugten Texteditor zu öffnen und nach dem Namen der Klasse zu suchen, die Ihnen Probleme bereitet. Stellen Sie sicher, dass Sie Xcode schließen, bevor Sie dies tun. In der Datei sollte sich eine Zeile für das .h und eine andere Zeile für das .m befinden. Wenn Duplikate vorhanden sind, entfernen Sie diese, speichern Sie die Datei und erstellen Sie sie neu.

4
Jeff Grimes

Ein weiterer Grund kann sein, dass das Projekt beim Erstellen einer Distributionsversion auf einen Simulator anstatt auf ein echtes Gerät abzielt. Das verursacht auch diese Fehlermeldung.

3
user3095716

Ich habe diesen Fehler erhalten, als ich eine statische Bibliothek in das Hauptprojekt aufgenommen habe, während ich gleichzeitig eine zweite Bibliothek mit einem Verweis auf die Bibliothek aufgenommen habe. Das ist ziemlich verwirrend, vielleicht ist das klarer.

MyWorkspace + Hauptprojekt + Verweis auf Bibliothek 1 + Verweis auf Bibliothek 2 + Bibliothek 1 + Bibliothek 2 + Verweis auf Bibliothek 1

Ich habe den Verweis auf Bibliothek 1 aus dem Hauptprojekt entfernt und der Fehler ist behoben.

3
Matt Becker

In bestimmten Fällen können Sie auch den Fehler "Doppelte Symbole für Architektur ..." erhalten, da Sie versehentlich eine Konstante (const) mit demselben Namen in zwei verschiedenen Dateien deklariert haben.

2
Aron

Der einfachste Weg, dies zu beheben, ist das Problem Xcode 7.0 oder neuer. Ändern Sie einfach keine gemeinsamen Blöcke in NEIN. Ihr Problem wird gelöst. Versuchen Sie dieses Projekt. Ziel> Build-Einstellung> Keine gemeinsamen Blöcke.

2

Ich hatte es, wo ich die gleiche C-Funktion zweimal definiert habe. In zwei verschiedenen .m Dateien. Entfernen Sie einfach eine der Definitionen und voila.

1
Rob Sanders

Ich habe versucht, das Projekt zu bereinigen, und alle abgeleiteten Daten gelöscht. Nichts hat geklappt. Atlas, das hat bei mir funktioniert.

enter image description here

Ein weiterer Grund kann sein, dass das Projekt beim Erstellen einer Distributionsversion auf einen Simulator anstatt auf ein echtes Gerät abzielt. Das verursacht auch diese Fehlermeldung.

1
A.G

Ich hatte diesen Fehler, nachdem ich eine Testdatei in das Projekt kopiert und eingefügt habe, wobei ich vergessen habe, den Namen der Schnittstelle und der Implementierungszeilen zu ändern:

@interface TDInputValidationsTests : XCTestCase

und

@implementation TDInputValidationsTests

Dummer Fehler ... Ich schlage auch vor, auf der Registerkarte "Build-Phasen" des Projekts nach Duplikaten zu suchen. Das Löschen der abgeleiteten Daten und das Erstellen eines sauberen Builds können ebenfalls hilfreich sein.

0

Entnommen aus https://stackoverflow.com/a/2755581/190599

Was Sie tun können, ist in Ihrem Header (MyConstants.h):

extern const int MyConstant;
extern NSString * const MyStringConstant;

Fügen Sie in eine Quelldatei den obigen Header ein, definieren Sie jedoch die Konstanten (MyConstants.m):

const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";

Dann müssen Sie den Header einfach in jede andere Quelldatei aufnehmen, die eine dieser Konstanten verwendet. Der Header deklariert lediglich, dass diese Konstanten irgendwo existieren, sodass der Compiler sich nicht beschwert, da es die Aufgabe des Linkers ist, diese Konstantennamen aufzulösen. Die Quelldatei, die Ihre Konstantendefinitionen enthält, wird kompiliert, und der Linker erkennt, dass sich dort die Konstanten befinden, und löst alle in den anderen Quelldateien gefundenen Verweise auf.

Das Problem beim Deklarieren und Definieren einer Konstante in einem Header (der nicht als static deklariert ist) besteht darin, dass der Compiler ihn für jede Datei, die diesen Header enthält, als eigenständiges Global behandelt. Wenn der Linker versucht, alle Ihre kompilierten Quellen miteinander zu verknüpfen, findet er den globalen Namen so oft, wie Sie MyConstants.h Eingegeben haben.

0
CodeReaper

Beim Einrichten von OCMock ist derselbe Fehler aufgetreten. Ich habe das Problem behoben, indem ich libOCMock.a im Abschnitt 'Dateien kopieren' der Erstellungsphase hinzugefügt habe

0
Eric

Ich habe Dateien aus einem anderen Projekt importiert, es hatte auch die Datei main.m. Insgesamt hatte ich also zwei main.m-Dateien, und das Löschen einer löste das Problem für mich.

0
Sikander

Für mich war das anders. Ich habe die Methoden zur Implementierung der Klassen so wie sie sind kopiert und die iVars wurden auch kopiert. In der iVars-Welt gibt es also zwei Mengen, und der Compiler hat sich vor dem Verknüpfen der * .o-Dateien immer wieder über doppelte ivars beschwert .

das Lesen der Ausgabe hat geholfen, so dass alle duplizierenden Ivars entfernt wurden ... dank der neuen Funktion, bei der Sie nicht alle Ihre Eigenschaften zu synthetisieren brauchen ... der Fehler ist verschwunden ...

0
Sanjeev

Ich hatte dieses Problem und steckte eine Weile fest. Die Ursache für das Problem war, dass ich einen Booleschen Wert in die .h-Datei (zwischen #import und @interface) geschrieben und in die .m-Datei verwendet habe

Ich habe sie einfach aus meiner .h-Datei gelöscht und an die gleiche Stelle in meine .m-Datei kopiert, und der Build ist erfolgreich.

0
Red.A

Ob Sie es glauben oder nicht, Xcode vermasselt die Projektdatei. Die einzige Lösung, die wir gefunden haben, war, jeden Verweis auf die betreffende Datei mit einem Texteditor manuell zu entfernen und die Dateien dann erneut in Xcode hinzuzufügen.

0
SomaMan

Hinweis für sich selbst: "LESEN SIE DEN FEHLER!"

In meinem Fall heißt es: duplicate symbol _OBJC_CLASS_$_SATCoreData in:

Übersetzung: Eine Objective C-Klasse namens SATCoreData wird dupliziert.

Dann gibt es den Pfad zu beiden Vorkommen des Symbols. Das Lesen des Pfads zeigt auf die beiden Klassen, die mit .o Enden. Wenn Sie sich beide Klassen ansehen, werden Sie etwas faul finden. In meinem Fall hatte ich versehentlich zwei Klassen den gleichen Namen gegeben. Eine Klasse, die ich in der Datei einer anderen Klasse hatte, weil ich etwas testete und zu faul war, um eine separate Klasse zu erstellen. Hoffe das hilft jemandem.

0
smileBot