Kompilieren externe C++ - Bibliothek für die Verwendung mit iOS-Projekt

Ich bin komplett neu in der Verwendung von C++ - Bibliotheken, so schätzen dies möglicherweise ein bisschen zu speziell für meinen Fall (lassen Sie mich wissen, und ich kann weitere Informationen geben).

Ich habe eine externe C++ - Bibliothek, die ich versuche, zur Verwendung mit einem iOS-Projekt. Die Bibliothek folgt einem configure, make, make build-Muster für die Ausgabe .eine Bibliothek-Datei. Wenn ich versuche, und fügen Sie diese Bibliothek-Datei Xcode, bekomme ich die folgende Fehlermeldung:

ignorieren-Datei
/Benutzer/Entwickler/iOS/"TestProj" /libpresage.eine, Datei war
gebaut für Archiv, das ist nicht die Architektur verknüpft wird (i386):

/Anwender/Entwickler/iOS/"TestProj" /libpresage.ein

Basierend auf diese Frageich habe versucht, drehen, Bauen, Active-Architektur Nur auf NEIN, und ich bekomme den gleichen Fehler. Dies lässt mich vermuten, dass ich zusammengestellt habe die Bibliothek für die falsche Architektur.

Läuft lipo -info auf der .eine Datei gibt:

input-Datei libpresage.ein ist nicht ein fat-Dateisystem Nicht fat-Datei: libpresage.ein

ist Architektur: x86_64

Gegeben, dass dies nicht armv7s, armv7, oder arm64, ich versuche, und kompilieren Sie das C++ - Bibliothek wieder mit den folgenden Parametern:

1) Versuchen

./configure CC="gcc -arch armv7s" \
                 CXX="g++ -arch armv7s" \
                 CPP="gcc -E" CXXCPP="g++ -E"

Fehler beim kompilieren, erhalte ich:

ld: library not found for -lcrt1.3.1.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2) Versuchen

./configure CC="gcc -arch arm64" \
                 CXX="g++ -arch arm64" \
                 CPP="gcc -E" CXXCPP="g++ -E"

Fehler beim kompilieren, erhalte ich:

ld: warning: ld: warning: ignoring file
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib,
fehlen erforderliche arm64-Architektur in der Datei
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib
(2 Scheiben)ignorieren-Datei
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libstdc++.dylib,
fehlen erforderliche arm64-Architektur in der Datei
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libstdc++.dylib
(2 Scheiben)

ld: dynamische wichtigsten ausführbaren Dateien müssen link mit libSystem.dylib für
Architektur arm64 clang: error: linker command failed with exit-code
1 (mit-v um zu sehen invocation)

Ist es etwas offensichtlich, dass ich bin fehlt?

EDIT:

Danke für die Antworten, also ich habe es geschafft, die library in Xcode, wie eine benutzerdefinierte build-Ziel, indem Sie den "make" - Befehl, um die Bibliotheken MakeFile. Dieser build gut.

Meine Schritte von hier:

  • Hinzufügen einer Abhängigkeit von meinem Objective C-iOS-app-target, um die benutzerdefinierte build-target.
  • Verweis auf die Bibliothek und eine Objektive C++ - wrapper.
  • Dies scheint in Ordnung, bis ich rufen Sie die externe C++ - Bibliothek, dann bekomme ich die Fehlermeldung beim kompilieren:

Undefined symbols for architecture armv7:
"Vorbote::Vorzeichen(PresageCallback*)", verwiesen von:
-[PresageBridge init] in PresageBridge.o
"Vorbote::~Ankündigen()", verwiesen von:
-[PresageBridge init] in PresageBridge.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use-v zu sehen invocation)

  • Mein Ziel C++ - wrapper - (Verknüpfung der externen C++ - Standardbibliothek header ankündigen.h):
    #import "PresageBridge.h"
    #include "presage.h"
    
    @implementation PresageBridge
    
    - (instancetype)init
    {
        if(self = [super init])
        {
    
           Presage hello(&callback);
        }
    
        return self;
    }
  • Basierend auf den obigen code, es scheint nicht, wie mir fehlen die header, und was interessant ist, ich habe auch versucht, erstellen Sie eine Instanz der anderen Klassen in der externen Bibliothek und Sie scheinen zu funktionieren, was darauf schließen lässt, dass Xcode link kann nicht ankündigen.h richtig für einige Grund.

InformationsquelleAutor der Frage HHHH | 2014-11-19

Schreibe einen Kommentar