76 votes

Lier une bibliothèque statique à un projet iOS dans Xcode 4

J'ai un projet ( AQGridView ) qui se compile en une bibliothèque statique, mais je ne parviens pas à l'ajouter à mon projet.

Le fait de faire glisser le projet vers mon projet crée un espace de travail, et si j'essaie de lier la libAQGridView.a à partir du fichier DerivedData le répertoire, il ne le reconnaît pas comme une bibliothèque. Je ne suis pas sûr de ce que je fais de mal.

C'est le AQGridView projet. Quelqu'un sait-il spécifiquement comment l'utiliser dans un projet Xcode 4 ?

1 votes

Vous avez voté contre moi après 29 votes positifs, 2 ans plus tard ? Et en plus de cela, la déclaration que vous venez de faire n'a aucun sens.

0 votes

0 votes

On ne peut pas l'expliquer mieux qu'ici : Liaison de bibliothèques statiques

95voto

Halle Points 2586

Je procède de la manière suivante :

  1. Faites glisser le projet de bibliothèque statique. Si le projet de bibliothèque statique est ouvert dans Xcode, fermez-le maintenant.
  2. Sélectionnez le projet principal dans le navigateur de projet (le projet auquel j'ajoute la bibliothèque statique) et dans l'éditeur, sous l'en-tête TARGETS dans la colonne de gauche, sélectionnez la cible de mon projet principal et naviguez vers l'onglet Build Phases.
  3. Cliquez sur le "+" pour les dépendances cibles et ajoutez la dépendance cible de l'icône de la bibliothèque à partir du projet de bibliothèque statique ajouté.
  4. Cliquez sur le "+" pour "Link Binary with Libraries" et ajoutez l'icône de la bibliothèque qui se trouve dans le dossier "Workspace".
  5. Il peut également être nécessaire d'entrer un chemin de recherche d'en-tête pour les en-têtes du projet de bibliothèque statique si c'est ainsi que les en-têtes sont liés dans le projet de bibliothèque statique lui-même.

Si vous ne voyez pas le projet de bibliothèque statique imbriqué sous le projet principal dans le navigateur de projet du projet principal, la raison la plus probable est que le projet Xcode de la bibliothèque statique est toujours ouvert. Quittez Xcode et ouvrez le projet principal dans lequel se trouve le projet de bibliothèque statique imbriqué sans ouvrir le projet de bibliothèque statique original lui-même, et vous devriez le voir apparaître comme un projet imbriqué dans votre projet principal.

18 votes

Cela semble devoir fonctionner, mais pour une raison quelconque, la bibliothèque n'apparaît pas dans la section Dépendances cibles. Elle apparaît sous Link Binary with Libraries, mais pas sous Target Dependencies. Je n'arrive pas à comprendre pourquoi elle ne s'affiche pas.

0 votes

Question stupide, mais la cible du projet de bibliothèque statique est-elle vraiment une bibliothèque ? Je vois que vous avez mentionné qu'il compile vers une bibliothèque, mais à l'intérieur du projet de bibliothèque statique, a-t-il une cible qui est une bibliothèque ?

3 votes

Il s'avère que le projet doit être imbriqué, ce qui corrigera l'apparition de la dépendance de la cible.

15voto

Kazuki Sakamoto Points 10100

Menu Xcode > Affichage > Utilitaires > Inspecteur de fichiers

Sélectionnez le fichier de bibliothèque statique, puis définissez le "Type de fichier" comme "Code objet Mach-O" dans "Identité et type".

0 votes

Wow, quelle solution bizarre, mais qui a totalement fonctionné pour moi. Merci ! Mon cas d'utilisation était de copier un .a dans la bibliothèque statique Frameworks sur la construction, et l'enchaînement contre elle, qui a commencé à jeter des erreurs de bibliothèque "image not found" après avoir réarrangé mon projet un peu. Plus maintenant, grâce à ce qui précède.

5voto

Richard J. Ross III Points 33152

Trouvez votre fichier .a dans le finder, et faites-le glisser dans votre projet.

Sélectionnez l'option "copier les éléments dans le dossier du groupe de destination (si nécessaire)", et ajoutez vos en-têtes à votre projet.

Maintenant, XCode 4 devrait automatiquement se lier à ce cadre pour vous.

Voici à quoi devrait ressembler la bibliothèque dans votre projet :

1 votes

J'ai fait exactement la même chose, mais il ne la reconnaît pas comme une bibliothèque. L'icône affiche juste une page au lieu de l'indicateur de bibliothèque.

0 votes

Bien sûr que non. Ce n'est pas censé ressembler à un cadre Cela ne veut pas dire qu'il n'y a pas de liens.

0 votes

Les cadres ont l'icône jaune, l'icône blanche qui ressemble à une construction de l'Empire romain est la bibliothèque :)

5voto

Joey Gibson Points 3779

Les espaces de travail sont censés rendre cela plus facile, mais je ne sais pas si c'est le cas. La façon dont je procède est de créer un espace de travail, d'ajouter mon projet principal et mon projet de bibliothèque. Ensuite, j'entre dans les phases de construction du projet principal et j'ajoute la bibliothèque dans la section "Link binary with libraries" et j'ajoute la bibliothèque. Cela debe soit tout ce qui est nécessaire, du moins c'est ma lecture, mais ce n'est pas le cas. Ce que je fais, c'est aller dans les préférences de Xcode, puis dans le panneau Arbres sources. Ajoutez un arbre source qui pointe vers les en-têtes de votre bibliothèque statique, puis retournez aux paramètres de construction de votre projet, puis à la clé Header Search Paths, et entrez-y ${foo}, où "foo" est le nom de l'arbre source.

C'est ce qui fonctionne pour moi, même si je ne sais pas si c'est la meilleure ou la plus simple des façons de faire.

0 votes

Si vous disposez de la dernière version de XCode, c'est sans aucun doute la voie à suivre. C'est beaucoup plus facile que de creuser dans les internes des projets et les répertoires de construction.

3voto

Corin Points 1419

Suivez les conseils d'Apple documentation .

En bref :

  1. Reliez votre cible à la bibliothèque.
  2. Ajouter -ObjC à 'Autres drapeaux de linker' ( OTHER_LDFLAGS ) dans les paramètres de construction de la cible.

De plus, j'ai dû ajouter la bibliothèque au schéma de mon projet principal car elle n'était pas visible dans les dépendances de la cible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X