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.

Je pense que vous utilisez la bonne technique pour construire la bibliothèque statique. Pouvez-vous confirmer les Paramètres de construction->Architecture de votre bibliothèque statique?

OriginalL'auteur feelfree | 2013-09-15