Compilation de la bibliothèque C ++ externe pour une utilisation avec le projet iOS

Je suis complètement nouveau à l'aide de bibliothèques C++, afin d'apprécier ce pourrait être un peu précis pour mon cas (laissez-moi savoir et je peux fournir plus de détails).

J'ai un externe de la bibliothèque C++ que je suis en train de l'utiliser avec un projet iOS. La bibliothèque suit un configure, make, make build modèle à sortie une .un fichier de bibliothèque. Lorsque j'essaie d'ajouter ce fichier de bibliothèque de Xcode, j'obtiens l'erreur suivante:

ignorant fichier
/Utilisateurs/Développeurs/iOS/TestProj/libpresage.un, dossier était
construit pour les archives, qui n'est pas l'architecture (i386):

/Utilisateurs/Développeurs/iOS/TestProj/libpresage.un

Basé sur cette questionj'ai essayé de tourner Construire Active de l'Architecture, Seule, et j'obtiens la même erreur. Ce qui me fait soupçonner que j'ai compilé la bibliothèque de la mauvaise architecture.

L'exécution de lipo -info sur le .un fichier donne:

fichier d'entrée libpresage.a n'est pas un gros fichier Non gras du fichier: libpresage.un

est l'architecture: x86_64

Étant donné que ce n'est pas armv7s, armv7, ou arm64, j'essaie de le compiler la bibliothèque C++ de nouveau avec les paramètres suivants:

1) Essayer

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

Erreur à la compilation, j'obtiens:

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

2) Essayer

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

Erreur à la compilation, j'obtiens:

ld: warning: ld: avertissement: le non-respect de fichier
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib,
manque architecture arm64 dans le fichier
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib
(2 tranches)en ignorant fichier
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libstdc++.dylib,
manque architecture arm64 dans le fichier
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libstdc++.dylib
(2 tranches)

ld: dynamique principaux exécutables doivent lien avec libSystem.dylib pour
l'architecture arm64 clang: erreur: échec de la commande de l'éditeur de liens avec le code de sortie
1 (v pour voir invocation)

Il est évident que je suis absent?

EDIT:

Merci pour les réponses, j'ai donc réussi à obtenir de la bibliothèque dans Xcode comme une cible de génération personnalisée, en pointant le "faire" commande pour les bibliothèques MakeFile. Cette construction d'amende.

Mon étapes à partir d'ici:

  • Ajouter une dépendance de mon Objectif C de l'application iOS de la cible de la cible de génération personnalisée.
  • Référence à la bibliothèque et faire un Objectif wrapper C++.
  • Cela semble bien jusqu'à ce que j'ai besoin d'appeler le externe de la bibliothèque C++, puis je reçois le message d'erreur lors de la compilation:

Les symboles non définis pour l'architecture armv7:
"Présage::Presage(PresageCallback*)", référencé à partir de:
-[PresageBridge init] dans PresageBridge.o
"Présage::~Presage()", référencé à partir de:
-[PresageBridge init] dans PresageBridge.o
ld: symbole(s) ne se trouvent pas pour l'architecture armv7
clang: erreur: échec de la commande de l'éditeur de liens avec le code de sortie 1 (l'option-v pour voir invocation)

  • Mon objectif wrapper C++ (liens externes de la bibliothèque C++ de l'en-tête présage.h):
    #import "PresageBridge.h"
    #include "presage.h"
    
    @implementation PresageBridge
    
    - (instancetype)init
    {
        if(self = [super init])
        {
    
           Presage hello(&callback);
        }
    
        return self;
    }
  • Basé sur le code ci-dessus, il ne semble pas comme je suis absent de l'en-tête, et ce qui est intéressant, c'est que j'ai aussi essayé de créer une instance d'autres classes dans la bibliothèque externe et ils semblent être au travail, ce qui suggère que Xcode ne pouvez pas lier le présage.h correctement pour une raison quelconque.

source d'informationauteur HHHH