ld.so(8)

НАЗВАНИЕ
ld.so, ld-linux.so* - программа динамической привязки

ОПИСАНИЕ
ld.so загружает разделяемые библиотеки, требуемые программами, подготавливает к запуску и затем исполняет ее. Пока явно не будет указан параметр -static для ld во время компиляции, все программы Linux будут незавершенными и будут требовать дальней привязки к библиотекам при запуске.

Разделяемые библиотеки, необходимые программам, ищутся по такому алгоритму:

o   Использовать динамический атрибут секции DT_RPATH бинарного файла, если он существует, а атрибут DT_RUNPATH не существует.

o   Использовать переменную окружения LD_LIBRARY_PATH, за исключением случаев, когда исполняемым файлом является бинарный файл, меняющий/устанавливающий идентификаторы пользователей; в этом случае она игнорируется.

o   Использовать атрибут динамической секции DT_RUNPATH бинарного файла, если существует.

o   Из кэш-файла /etc/ld.so.cache, содержащего скомпилированный список бибилиотек, ранее найденных в пути поиска. Однако, если исполняемый файл был связан с параметром -znodeflib, то библиотеки, находящиеся в каталогах по умолчанию, пропускаются.

o   В каталоге по умолчанию /lib, затем в /usr/lib. Если бинарный файл был связан с параметром -z nodeflib , то этот шаг пропускается.

СИНТАКСИС
Программа динамической привязки может быть запущена как косвенно, при запуске некоторых динамически связанных программ или библиотек (в этом случае никаких параметров в командной строке программе не передается, и запускается программа, сохраненная в секции .interp), так и явно, запуском:

/lib/ld-linux.so.* [OPTIONS] [PROGRAM [ARGUMENTS]]

ОПЦИИ КОМАНДНОЙ СТРОКИ

--list
    Перечисляет все зависимости и раскрывает их.

--verify
    Проверяет, является ли программа динамически связанной и сможет ли текущая программа динамической связки обработать ее.

--library-path PATH
    Переопределяет настройки переменной окружения LD_LIBRARY_PATH (см. ниже).

--ignore-rpath LIST
    Игнорирует информацию RPATH и RUNPATH в названиях объекта из списке LIST.

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

LD_LIBRARY_PATH
    Список каталогов, разделенных двоеточиями, в котором нужно искать библиотеки ELF во вермя запуска. Похоже на переменную окружения PATH.

LD_PRELOAD
    Список (разделенных пробелами) пользовательских разделяемых ELF-библиотек, которых надо загрузить перед остальными библиотеками. Данный параметр может использоваться для выборочного переопределения функций в других разделяемых библиотеках. Для бинарных файлов ELF, меняющих идентификаторы пользователей, будут загружены только библиотеки из системных каталогов.

LD_TRACE_LOADED_OBJECTS
    Если не является пустой строкой, заставляет программу перечислить свои динамические библиотечные зависимости, как если бы программа была запущена ldd.

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

LD_WARN
    Если не является пустой строкой, то предупреждает о неразрешимых символах.

LD_DEBUG
    Выдает подробную отладочную информацию о программе динамической привязки. Если установлено в all, то выдает всю отладочную информацию, если установлено в help, то выдает информационное сообщение о возможных категориях в этой переменной окружения.

LD_DEBUG_OUTPUT
    Файл, куда исходящий поток LD_DEBUG будет посылать данные, по умолчанию - стандартный поток вывода. LD_DEBUG_OUTPUT игнорируется для бинарных файлов, изменяющих идентификаторы пользователей.

LD_VERBOSE
    Если не является пустой строкой, то выдает информацию о версии символов программы при запросе информации о программе (то есть либо определено LD_TRACE_LOADED_OBJECTS, либо параметры --list или --verify переданы программе динамичской связки).

ФАЙЛЫ
/lib/ld-linux.so.* программа динамической привязки/загрузки для ELF
/etc/ld.so.cache
    Файл, содержащий список каталогов, по которым производится поиск библиотек, и упорядоченный список библиотек.
/etc/ld.so.preload
    Файл, содержащий разделенный пробелами список разделяемых ELF-библиотек для загрузки перед программами и остальными библиотеками.
lib*.so*
    разделяемые библиотеки

СМ. ТАКЖЕ
ldd(1), ldconfig(8).

АВТОРЫ
Roland McGrath, Ulrich Drepper и другие. Данное руководство взято из libc 5 ld.so.