В чем разница между динамическим компоновщиком и динамическим загрузчиком?

Я знаю, что делает динамический загрузчик. Он загружает программы, как и когда запрашивается приложением во время выполнения, тем самым минимизируя печать памяти. Но я действительно не понимаю, что это за динамический компоновщик? И в чем его преимущества? Я читал много онлайн-материалов, но они говорят в абстрактных терминах.

может ли кто-нибудь объяснить мне некоторые простые примеры?

1 ответов


это действительно два термина для одного и того же.

в мире Unix термин динамический компоновщик используется для обозначения компонента операционной системы, который связывает динамические библиотеки во время выполнения, в то время как загрузчик в большинстве других систем выполняет как загрузку программ, так и связывание динамических библиотек.

потому что загрузка библиотек в Unix-подобных системах выполняется отдельным компонентом (ld.so чаще всего), динамический компоновщик считается чем-то отличным от программы погрузчик. Компиляторы обычно вставляют некоторый заглушку кода в начале исполняемого файла для загрузки ld.so и ld.so продолжит загрузку остальных зависимых библиотек до main вызывается. В то время как загрузка программы выполняется в kernelspace, связывание динамических библиотек обычно выполняется в userspace.

это не похоже на Windows, где загрузка программ и связывание динамических библиотек выполняется в режиме ядра.