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