Статические библиотеки - это всего лишь коллекция объектных файлов. Вы можете представить их как tar-файл, содержащий все соответствующие файлы .a (или в Windows, как zip-файл, содержащий файлы obj). Здесь не задействована связующая часть компоновщика (в действительности традиционно статические библиотеки в системах Unix выполняются с помощью утилиты ar
, которая как-то связана с tar
). Они полностью разрешены во время компиляции, и они просто используются как способ избежать пересоздания всего времени, которое требуется для создания или выполнения сложных процедур сборки.
Динамические библиотеки - это разные зверь. Они представляют собой полноценные исполняемые файлы, которые могут быть загружены другими процессами, поэтому регулярный компоновщик необходим по тем же причинам, что и в обычных исполняемых файлах. Вместо предоставления только одной точки входа они экспортируют полную таблицу символов, которая используется загрузчиком (или «компоновщик времени выполнения»), чтобы хост-программа могла найти необходимые процедуры. Как правило, они также содержат информацию о перемещении, чтобы разрешить загрузку по любому адресу в целевом адресном пространстве (или они скомпилированы в независимый от позиции код по этой же причине).
Мы говорим о статических или динамических библиотеках? –