Comment construire et utiliser C++ bibliothèque statique pour l'application ios
Je sais comment construire un objet statique de la bibliothèque à l'aide de iOS->Framework&Library->Cocoa Touch Static Library
dans xcode 4.6, et c'est simple, avec l'aide de ce tuto La création d'une Bibliothèque Statique dans iOS Tutoriel. Une chose que je ne suis pas sûr, toutefois, est de savoir comment construire et utiliser un pur C++ bibliothèque statique pour io application. Pour la construction d'un C++ statique de la bibliothèque, je suis également utiliser iOS->Framework&Library->Cocoa Touch Static Library
directive, et la différence est que j'ai supprimer tous les .h et .m les fichiers lors de la création du projet de bibliothèque statique et ensuite les mettre tous le C++ statique en chef de la bibliothèque de fichiers et les fichiers de mise en œuvre dans le projet. Un exemple très simple est comme suit:
bonjour.h
#include <iostream>
void say_hello();
hello.cpp
#include "hello.h"
void say_hello()
{
std::cout<<"hello"<<std::endl;
}
Il semble de travail, et je peux construire hello.a
bibliothèque statique pour iPhone 6.1 Simulateur. La prochaine étape est de construire une application qui vous permettra d'invoquer la bibliothèque statique. J'ai créer un simple iOS application->Single View Application
pour iPhone 6.1 Simulateur, puis essayez d'appeler le hello.a
bibliothèque statique dans ViewController.mm
fichier (changement ViewController.m à ViewController.mm, de sorte qu'il peut invoquer la fonction C++) simplement avec le code suivant:
say_hello();
Cependant, j'ai reçu un avertissement et deux messages d'erreur:
Avertissement:
ld: warning: ignoring file hello.a, file was built for archive which is not the architecture being linked (i386):
Erreur 1:
hello.a
Undefined symbols for architecture i386:
"say_hello()", referenced from:
-[ViewController viewDidLoad] in ViewController.o
Erreur 2:
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Je puis avoir plusieurs questions liées à cette expérience:
- Est-ce la bonne façon de créer un pur C++ statique de la bibliothèque?
-
Est-il quelque chose de mal avec la façon dont j'invoque le C++ statique
bibliothèque? -
Dans mon exemple, lors de l'invocation de la bibliothèque statique, comment résoudre les erreurs de lien?
Merci beaucoup.
OriginalL'auteur feelfree | 2013-09-15
Vous devez vous connecter pour publier un commentaire.
Cela va faire,
1)Créer de la bibliothèque c++ en utilisant la même façon, iOS->Cadre&Bibliothèque->Cocoa Touch Bibliothèque Statique dans Xcode 6.
TestCPlusPlus.h
TestCPlusPlus.cpp
2) Construire la bibliothèque statique en gardant la configuration de l'Appareil iOS, puis de l'iPhone 6(en gros simulateur.)
3) puis Développez des Produits dans le Navigateur de Fichiers à afficher. Sélectionnez votre .un fichier, disons libTestStaticLibrary.un , puis Bouton Droit > Afficher dans le Finder. Déplacer vers le haut dans les dossiers. Vous devriez être en mesure de voir deux folers Debug-iphoneos et Debug-iphonesimulator
4) maintenant
ouvrir un Terminal aller jusqu'à présent les Produits de chemin puis tapez
lipo -créer Debug-iphoneos/libTestStaticLibrary.un Debug-iphonesimulator/libTestStaticLibrary.une sortie libTestStaticLibrary.un
5) Maintenant, ouvrez votre projet qui utilise cette bibliothèque, vous devez faire glisser et de déposer à la bibliothèque statique des fichiers ainsi que les fichiers d'en-tête qui ont la fonction de la déclaration de la statique des fonctions de la bibliothèque.
6) Maintenant, créez Cocoa touch fichier de classe qui va agir comme adaptateur entre la bibliothèque statique et objectif -c fichiers. Modification de l'extension de .mm
MyCustomAdaptor.h
MyCustomAdaptor.mm
@fin
7) maintenant, utilisez ce MyCustomAdaptor en tout de l'objectif c - fichier.
OriginalL'auteur vkhemnar
Veuillez noter que votre .un est de construire avec i386 ou armv7?
En général, vous devez construire les deux versions et de les combiner en un seul.
comme ceci:
lipo -créer -sortie libopencore-amrwb.un libopencore-amrwb-armv7.un libopencore-amrwb-i386.un
OriginalL'auteur LeverkusenFan
Je suis en train de faire la même chose que vous. J'ai eu le même problème que vous décrivez ici, en fait les deux mêmes erreurs.
Lorsque vous construisez votre bibliothèque, vous devez avoir à l'esprit où êtes vous allez l'utiliser, appareil iOS ou un simulateur.
Ceci est important parce que vous avez à construire pour les différents cas, c'est très simple, lorsque vous générez bibliothèque vous cochez simplement la case "Sélectionner".
Pour une Réelle utilisation de l'appareil:
Juste pour tester le simulateur d'utilisation:
Après la construction il suffit de glisser-déposer les fichiers créés pour le projet que vous souhaitez utiliser la bibliothèque et vous êtes bon pour aller!
OriginalL'auteur T.V.