Почему размер конечного двоичного файла будет намного меньше, чем размер статической библиотеки? - PullRequest
13 голосов
/ 30 марта 2012

Это вопрос iOS.

Я создаю статическую библиотеку ( framework в iOS), которая затем включается в приложение. Размер результирующего двоичного файла (500 КБ) меньше размера статической библиотеки (6 МБ). Как это работает? Я понимаю, что статическая библиотека состоит в том, что статическая библиотека включена в окончательный двоичный файл

Ответы [ 2 ]

24 голосов
/ 30 марта 2012

Потому что вы не используете все функции вашей библиотеки. Статическая библиотека архивного типа .a представляет собой набор .o объектных файлов, и только ссылки на объекты, необходимые в вашей программе, включены во время ссылки.

3 голосов
/ 30 марта 2012

Всякий раз, когда вы статически связываете исполняемый файл, компоновщик может продолжить и разрешить все имена символов (то есть сопоставить их с адресом), поскольку все символы, которые он будет знать о вас, предоставили компоновщику сейчас (в виде .o файлов и .a библиотек, которые на самом деле являются просто набором .o файлов).Если есть имена, которых там нет, вы получите ошибку связи (это отличается от динамического связывания, когда вы можете загрузить другую библиотеку во время выполнения).В вашем случае у вас есть дополнительные символы, на которые не ссылается исполняемый файл.Поскольку эти символы известны компоновщику как неиспользуемые, они просто удаляются из исполняемого вывода.Таким образом, ваш исполняемый файл в этом случае будет меньше входных библиотек.

...