2010-12-01 25 views
5

Je crée une bibliothèque statique iOS à utiliser par des tiers. Il est construit en utilisant plusieurs autres bibliothèques statiques contenant une grande quantité de C++, ce qui donne une énorme bibliothèque livrable.Comment obtenir une liste de symboles mis au rebut lorsque l'application iOS est liée à une bibliothèque statique?

L'API de la bibliothèque iOS est assez simple, et je sais qu'elle n'exerce pas tout le code inclus. Je voudrais supprimer les modules indésirables des différentes bibliothèques afin que je puisse réduire la taille finale.

J'ai un exemple d'application qui utilise toutes les API de bibliothèque, et quand il est lié, la plupart des symboles de la bibliothèque sont rejetés. Y a-t-il un moyen d'obtenir une liste de ces symboles?

Répondre

0

On m'a dit que la restriction sur l'utilisation bibliothèque dynamique est appliquée par le processus de signature de code, donc je pense que cela pourrait fonctionner:

  1. Lien l'exécutable de votre application par exemple à la bibliothèque statique
  2. Run nm -uj à la liste t Il a des symboles indéfinis dans l'exécutable. Depuis la bibliothèque a été liée statiquement, les seuls symboles non définis doivent être ceux définis par les bibliothèques standard iOS
  3. Créer une version dynamique de la bibliothèque statique
  4. Lien l'exécutable de votre application par exemple à la bibliothèque dynamique
  5. Exécutez nm -uj contre cet exécutable. Les symboles non définis sont l'union de ceux listés à l'étape 2 avec les symboles de bibliothèque qui sont réellement référencés par l'exécutable
  6. diff les listes de l'étape 2 et l'étape 5. Cela vous donnera la liste des symboles dans la bibliothèque seulement
  7. Run nm -js __TEXT __text sur les fichiers objet pour obtenir une liste des fonctions exportées par chaque fichier objet
  8. Ajouter à la bibliothèque uniquement les fichiers d'objets qui exportent une fonction indiquée à l'étape 6.

Cela peut être automatisé et a probablement besoin d'être amélioré pour prendre en compte les symboles autres que les fonctions (par ex. bles).