Когда вы компилируете код с помощью gcc, он может напрямую создавать объектные файлы, и несколько объектных файлов могут быть связаны вместе для создания исполняемого файла.
Статическая библиотека - это просто коллекция объектных файлов (обычнос индексом), который может использоваться компоновщиком при создании исполняемого файла.
Разница между простым связыванием объектных файлов и связью со статической библиотекой заключается в том, что с библиотекой компоновщик будет выбирать только объектфайлы из него, которые абсолютно необходимы, в то время как при компоновке с объектными файлами компоновщик вынужден принимать все файлы.
Динамическая библиотека снова отличается - сильно отличается.Это коллекция объектных файлов, но на этот раз это выход процесса связывания со всеми его внутренними ссылками, уже разрешенными.
Связывание с динамической библиотекой означает, что компоновщик разрешает символы только в конечном исполняемом файле,но не добавляет ни один объектный код из библиотеки во время соединения.
Запуск исполняемого файла, связанного с динамическими библиотеками, означает, что во время выполнения некоторое специальное программное обеспечение должно запрашивать загрузку операционной системыуказанная динамическая библиотека в память (именно поэтому динамическая библиотека должна создаваться компоновщиком) обычно до того, как программа получает main()
.
Этот исполняемый файл может быть очень маленьким файлом на диске, но когдазагружается в память и после загрузки динамических библиотек общий образ памяти может быть довольно большим, так как в него будет загружена вся библиотека.
Я считаю, что в случае, если несколько разных программ нуждаются в одной динамической библиотеке,операционная система может использовать виртуальную память для каждой программызагрузить библиотеку, но при этом используется только одна копия физической памяти - в некоторых случаях это может быть большой экономией.
Если вы отправите исполняемый файл, которому нужна динамическая библиотека, то вам может повезти и файлможет быть уже на компьютере пользователя.Если нет, то вам придется установить и это.Однако, если вы обнаружите ошибки в своей библиотеке, то просто отправив новую версию , ваша динамическая библиотека исправит ошибки.
Исполняемый файл, созданный из статических библиотек, готов к работе, но исправляетошибки могут включать пересылку всего исполняемого файла.
В заключение:
object files static library dynamic library
produced by compiler librarian linker
exe large smaller smallest
ram x 1 copy large smaller largest
ram x n copies large smaller smallest
dep on files independent independent dependant
upgrade lib no no yes