Aufruf von Objective-C aus der Swift-Klasse, die Linker-Fehler verursacht

8

Ich versuche die RFDuino Objective-C-Bibliothek in Swift zu verwenden. Alles klingt einfach, ich habe Objective-C schon früher aus Swift-Klassen aufgerufen, kein Problem. Dieses Mal jedoch traf ich die Mauer.

Erstellte Header-Datei. Header-Dateien hinzugefügt. Swift kann die Klassen problemlos sehen. Projekt kompiliert fein.

Das Problem während der Erstellung erscheint, nachdem ich versucht habe, eine der Objective-Klassen aufzurufen

zum Beispiel:

%Vor%
  

Nicht definierte Symbole für Architektur x86_64:     "_OBJC_CLASS _ $ _ RFduinoManager", referenziert von:         __TMaCSo14RFduinoManager in ViewController.o   ld: Symbol (e) nicht für Architektur x86_64 gefunden   clang: error: Der Linker-Befehl ist mit dem Exit-Code 1 fehlgeschlagen (benutze -v, um den Aufruf zu sehen)

Ich bin mir nicht sicher, was ich hier vermisse. Link zum Projekt hier. Ссылка

Vielen Dank im Voraus für Hilfe. Ehrlich Hoffnung jetzt verlieren und erwägen, die ganze Bibliothek zu Swift umzuschreiben

    
Greg Lukosek 25.07.2015, 16:53
quelle

3 Antworten

14

Das Problem ist, wie der rfduino-Ordner zum Projekt hinzugefügt wurde. Also

  1. Entfernen Sie den Ordner rfduino (indem Sie den rfduino-Ordner im Projektnavigator-Feld links auswählen und auf die Schaltfläche Löschen klicken. Wenn Sie ihn jedoch in den Papierkorb verschieben oder Referenzen entfernen möchten, wählen Sie "Referenzen entfernen".

  2. Ihr Bridging-Header hat eine absolute Pfadreferenz. Ich würde vorschlagen, das Ganze zu entfernen, indem Sie es in den Build-Einstellungen auswählen und den Delete-Button drücken:

  3. Fügen Sie die rfduino-Dateien erneut zum Projekt hinzu, wählen Sie diesmal unter "hinzugefügte Ordner" die Option "Gruppen erstellen" und nicht "Ordnerreferenzen erstellen". Wenn Sie möchten, dass Sie einen geeigneten Bridging-Header für Sie erstellen, wählen Sie nicht den Ordner aus, sondern wählen Sie die einzelnen Dateien aus:

    Stellen Sie außerdem sicher, dass SmartHomeHub unten markiert ist.

  4. Wenn Sie das richtig machen, werden Sie aufgefordert, einen Überbrückungs-Header automatisch zu erstellen:

  5. Gehen Sie zu diesem neuen Bridging-Header und fügen Sie Ihre Import-Zeilen erneut hinzu:

Rob 25.07.2015, 17:19
quelle
4

Dies ist ein Linker-Fehler, kein Compiler-Fehler. Sind Sie sicher, dass die RFduino-Klasse (Quelle oder Bibliothek) in Ihrem Projekt enthalten ist (öffnen Sie rechts in Xcode das Projektmitgliedschaftsfenster und vergewissern Sie sich, dass das Kontrollkästchen aktiviert ist, um die Bibliothek in Ihr Ziel aufzunehmen).

Wenn es enthalten ist, stellen Sie sicher, dass es x86_64-Code kompiliert hat. Es könnte eine iOS-Bibliothek sein und wurde nur für ARM kompiliert. Sie können dies überprüfen, indem Sie die Binärdatei finden und lipo über die Befehlszeile ausführen.

lipo -info [name of RFduinolibrary.a(dylib,whatever)]

es sollte x86_64 als eine Architektur zeigen, ala:

Architectures in the file are: i386 x86_64

    
par 25.07.2015 17:00
quelle
0

"Das Ziel OPN [Debug] überschreibt die Build-Einstellung OTHER_LDFLAGS". Das war das Hauptproblem. Nach dem Hinzufügen von $ (geerbt) in neue Zeile in anderen Linker Flags löste mein Problem.

    
Mohsen mokhtari 16.01.2018 09:06
quelle