Прямая привязка - Direct binding

Прямая привязка это особенность компоновщик и динамический компоновщик на Солярис и OpenSolaris. Он предоставляет метод, позволяющий библиотекам напрямую связывать символы с другими библиотеками, а не выполнять слабую привязку к ним и оставлять динамический компоновщик для определения того, какая библиотека содержит символ.

Теория

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

Такой вид слабого связывания заставляет динамический компоновщик решать, какая библиотека содержит какой символ при запуске исполняемого файла. Например, динамический компоновщик в Linux читает раздел DT_NEEDED файла ELF объект и загружает необходимые библиотеки; но не сказано, где находятся обязательные символы. Для этого он должен перебирать каждый неразрешенный символ в объекте и для каждого из них перебирать каждую загруженную библиотеку, проверяя, пока не найдет соответствующий символ. Это может занять много времени.

Прямая компоновка позволяет решить эту проблему, сохраняя эквивалентный список указателей на записи DT_NEEDED в отдельном разделе ELF. Каждый указатель соответствует символу в объекте; таким образом, эти указатели создают связь между символом и записью DT_NEEDED. Это позволяет компоновщику находить библиотеку, указанную конкретной записью DT_NEEDED, и проверять только ее таблицу символов для каждого символа, а не перебирать потенциально каждую библиотеку для каждого символа.

Рекомендации

внешняя ссылка