Почему размер финальной бинарной таблицы будет намного меньше размера статической библиотеки?

Это вопрос iOS.

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

Ответ 1

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

Ответ 2

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