Dupliquer le symbole: Inclure la bibliothèque statique A dans la bibliothèque statique B, inclure également la bibliothèque A et B dans le projet XCode

J'ai essayé de build un set de bibliothèques réutilisables pour le développement d'applications, mais je commence à rencontrer un problème.

Une de mes bibliothèques statiques est un set de methods d'utilisation générale (catégories sur les classs Foundation Objective-C pour améliorer leur convivialité) que j'ai tendance à utiliser dans chaque projet. (Nous l'appellerons Lib A … c'est-à-dire que le projet XCode A produit libProjectA.a)

Ensuite, j'ai d'autres libs statiques, des choses qui contiennent du code spécialisé pour les maths, etc. (Nous l'appellerons Lib B.) Lib B lie à Lib A car il doit utiliser certaines de ces fonctionnalités générales. (c'est-à-dire que le projet XCode B est lié à libProjectA.a et produit libProjectB.a)

Dans mon projet XCode, je veux inclure et dépendre de Lib A parce qu'il a mes trucs d'utilisation générale que j'utilise tout le time. Je veux aussi inclure et countr sur Lib B parce que j'ai besoin de cette fonctionnalité mathématique spécialisée. (c'est-à-dire que mon application Project veut créer un lien avec libProjectA.a et libProjectB.a)

Cependant, lorsque j'essaie de build mon projet XCode, j'obtiens des erreurs pour les symboles dupliqués, car les symboles définis dans Lib A sont également définis dans Lib B.

ld: duplicate symbol _OBJC_METACLASS_$_Foo in /Users/kenny/xcode_build/Release-iphonesimulator/lib_ApplicationCore.a(Foo.o) and /Users/kenny/xcode_build/Release-iphonesimulator/lib_SpecializedMath.a(Foo.o) 

Comment puis-je contourner ce problème? Je veux développer des bibliothèques réutilisables pour accélérer le développement de mon application et augmenter la stabilité grâce à du code testé / raffiné. Est-ce que j'approche cela d'une mauvaise perspective? Je développe pour iOS donc je ne peux pas utiliser dylibs, ils doivent être statiques.

Comment puis-je inclure ces bibliothèques dans mon projet lorsqu'elles sont interdépendantes les unes des autres et éviter les symboles en double?

Bien que Lib B dépende de Lib A, vous ne voulez pas vraiment mettre tous les objects de A dans B, ce que vous avez fait par son apparence. Je ne suis pas sûr de la façon dont vous avez géré cela, mais j'imagine que lorsque vous avez construit Lib B, vous étiez lié à Lib A? Si c'est le cas, omettez simplement Lib A de la ligne de construction pour Lib B. Tous les symboles de Lib A sont destinés à être indéfinis dans Lib B.

Les bibliothèques statiques sont simplement des archives de files objects, les deux doivent être complètement séparés. Lorsque vous avez besoin d'un lien avec Lib B, spécifiez simplement Lib A.

Ce fil a discuté de supprimer les duplicates en utilisant des outils de command line.

Comment gérer les erreurs de symboles en double provenant de bibliothèques tierces?

Ils ont extrait les files .o à l'intérieur des files .a et ont supprimé les duplicates puis les ont combinés à nouveau.