@beduin01

Чем отличается динамическая библиотека от статической?

Никак не могу понять чем отличается динамическая библиотека от статической. По идее же и там и там код. Почему одну нельзя преобразовать в другую. К примеру влинковать в бинарик функции из динамической библиотеки.

Если что я имею ввиду разницу принципиальную. То что динамические можно подгрузить в рантайме это и так понятно.
  • Вопрос задан
  • 26579 просмотров
Решения вопроса 1
Статическая библиотека это фактически архив объектных файлов, который используется в процессе статической линковки. В результате статической линковки из многих объектных файлов получается один исполняемый, запускается статическая линковка в момент создания исполняемого файла.

Динамическая библиотека это фактически исполняемый файл (т.е. DLL и EXE в Windows имеют одинаковый формат). Динамическая линковка запускается в момент создания процесса (когда вы запускаете исполняемый файл на выполнение), линкуются между собой несколько исполняемых файлов каждый раз, когда создается новый процесс. Так же возможна динамическая линковка уже после запуска, т.е. новая библиотека может быть подгружена в адресное пространство ужа работающего процесса.

Сделать из статической библиотеки динамическую в принципе можно - необходимо ее (статически) слинковать в динамическую библиотеку, при этом будет создана динамическая библиотека и статическая стаб-библиотека, которую можно использовать в проекте вместо статической библиотеки, чтобы вызывать функции из динамической библиотеки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
Подразумевается, что динамическая библиотека - уже есть в системе, и при запуске вашей программы библиотеку не нужно копировать вместе с вашей программой - необходимая (или совместимая) версия библиотеки уже будет доступна в системе.

Статическая линковка - вы линкуетесь с конкретным файлом, и если копируете программу на другую машину, копируете и эту библиотеку вместе с исполняемым. С одной стороны у вас более надежно - точно заработает. С другой стороны - размер инсталлятора больше, если понадобилась статическая линковка - значит вы используете нестабильную/устаревшую библиотеку (это если мы говорим о системных библиотеках. Свои кастомные библиотеки можно линковать как вам удобно)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы