Re: Я не вижу большой пользы от его использования, кроме сокращения времени поиска файлов для каждого из объектных файлов.
Ваше понимание выгоды не совсем верно.Архивы уменьшают рабочую нагрузку разрешения отдельных символов .
Если вы связываете программу из множества отдельных .o
файлов, компоновщик должен рассматривать их все одновременно.Ссылки могут идти в любом направлении.Самый последний .o
в командной строке может вызывать функцию в самом первом .o
и наоборот.
Это не так (по умолчанию, по крайней мере) с архивами.С архивами функции в более ранних архивах могут ссылаться только на символы, определения которых появляются в более поздних архивах.(Это также связано с традиционным соглашением Unix, почему параметры компоновщика -l
идут в конце командной строки !!! Сначала ваши .o
файлы, а затем командная строка.)
Это означает, чточто после появления архива, который определяет символ, вы можете быть уверены, что более поздние архивы больше не будут использовать этот символ.Это означает, что вы можете удалить его из своих структур данных.Вы в основном «сделали», связывая эту конкретную библиотеку;он удовлетворил предыдущие ссылки, и все, что осталось, это удовлетворить его неразрешенные ссылки.Если вы правильно упорядочите процесс компоновки, а программное обеспечение будет хорошо наслоено, вы сможете минимизировать количество выдающихся символов в любое время.
Linux уже более 20 лет, а его система сборки имеет длинный и богатыйистория, как и код.Архивы не использовались изначально;Я думаю, что это началось только в 2.6
.Кроме того, зависимости когда-то генерировались сценарием GNU awk.Люди построили ядро на 25 МГц 386 блоках с 4 мегабайтами оперативной памяти, хаха.
Сегодня используются архивы, потому что им нужно было увеличивать ядро.Это не просто так!