Введение

Функция линкера и динамического линкера в Solaris Direct binding является функцией линкера и динамического линкера в Solaris и OpenSolaris. Он обеспечивает метод, позволяющий библиотекам напрямую связывать символы с другими библиотеками, а не слабо связывать их и оставлять динамическую ссылку, чтобы выяснить, какая библиотека содержит символ.

Теория

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