Pourquoi la taille du binary final serait-elle tellement plus petite que la taille de la bibliothèque statique?

Ceci est une question iOS.

Je construis une bibliothèque statique (un framework dans iOS) qui est ensuite incluse dans une application. La taille du résultat binary (500 Ko) est inférieure à la taille de la bibliothèque statique (6 Mo). Comment cela marche-t-il? Ma compréhension de la bibliothèque statique est que la bibliothèque statique est incluse dans le binary final

Parce que vous n’utilisez pas toutes les fonctions de votre bibliothèque. Une bibliothèque statique de type archive .a est une collection de fichiers object .o . Seuls les fichiers object nécessaires à votre programme sont inclus au moment de la liaison.

Chaque fois que vous liez de manière statique un exécutable, l’éditeur de liens peut résoudre tous les noms de symboles (c.-à-d. Les mapper à une adresse) puisque tous les symboles qu’il connaît vous ont maintenant fournis à l’éditeur de liens (sous la forme de fichiers .o et .a bibliothèques qui ne sont en réalité qu’une collection de fichiers .o ). S’il y a des noms qui ne sont pas là, vous obtiendrez une erreur de lien (ceci est différent du lien dynamic où vous pourrez peut-être charger une autre bibliothèque au moment de l’exécution). Dans votre cas, vous avez des symboles supplémentaires qui ne sont pas référencés par l’exécutable. Etant donné que ces liens sont connus de l’éditeur de liens comme étant inutilisés, ils sont simplement supprimés de la sortie exécutable. Donc, votre exécutable sera plus petit que les bibliothèques d’entrée dans ce cas.