ld.so, ld-linux.so -
динамический
компоновщик/загрузчик
Динамический
компоновщик
может
запускаться
неявно из
динамически
скомпонованной
программы
или общего
объекта (в
этом
случае
динамическому
компоновщику
невозможно
передать
параметры
командной
строки, как
и в случае с
ELF, когда
динамический
компоновщик
хранится в
разделе
.interp
исполняемой
программы)
или явно с
помощью
вызова:
/lib/ld-linux.so.*
[ПАРАМЕТРЫ]
[ПРОГРАММА
[АРГУМЕНТЫ]]
Программы
ld.so и
ld-linux.so* ищут
и
загружают
общие
объекты
(общие
библиотеки),
необходимые
программе,
а также
подготавливают
программу
к запуску и
запускают
её.
Для
двоичных
файлов Linux
требуется
динамическая
компоновка
(компоновка
во время
выполнения),
если при
сборке
программе
ld(1) не был
передан
параметр
-static.
Программа
ld.so
предназначена
для
обработки
двоичных
файлов в
формате a.out,
который
используется
с давних
пор.
Программа
ld-linux.so* (
/lib/ld-linux.so.1,
если
используется
libc5 и
/lib/ld-linux.so.2, если
glibc2)
предназначена
для
обработки
файлов в
более
современном
формате ELF.
Обе
программы
ведут себя
одинаково
и
используют
одни и те же
файлы
поддержки
и
программы (
ldd(1),
ldconfig(8) и
/etc/ld.so.conf).
При
определении
зависимостей
общего
объекта,
динамический
компоновщик
сначала
просматривает
каждую
строку
зависимости
в поисках
символа
косой
черты
(такое
случается,
если путь
общего
объекта с
косой
чертой был
задан во
время
компоновки).
Если косая
черта
найдена, то
строка
зависимости
воспринимается
как путь
(относительный
или
абсолютный),
и общий
объект
загружается
исходя из
этого пути.
Если в
зависимости
общего
объекта
отсутствует
косая
черта, то
поиск
выполняется
в
следующем
порядке:
- (1)
- В
каталогах,
указанных
в атрибуте
DT_RPATH
динамического
раздела
двоичного
файла, если
он есть и
если
атрибут DT_RUNPATH
не
существует.
Использование
DT_RPATH не
рекомендуется.
- (2)
- В
переменной
окружения
LD_LIBRARY_PATH, если
исполняемый
файл не
выполняется
в режиме
безопасного
выполнения
(смотрите
далее), в
котором
данная
переменная
игнорируется.
- (3)
- В
каталогах,
указанных
в атрибуте
DT_RUNPATH
динамического
раздела
двоичного
файла, если
он есть.
Эти
каталоги
просматриваются
только при
поиске
объектов,
требуемых
элементами
DT_NEEDED (прямые
зависимости)
и не
применяются
к дочерним
объектам,
которые
сами
должны
иметь свои
собственные
элементы
DT_RUNPATH. В этом
отличие от
DT_RPATH, которые
применяются
при поиске
для всех
потомков в
дереве
зависимостей.
- (4)
- В
кэш-файле
/etc/ld.so.cache,
содержащем
скомпилированный
список
кандидатов
общих
объектов,
которые
ранее были
найдены по
указанным
путям
расположения
библиотек.
Однако,
если при
сборке
двоичного
файла
компоновщику
был указан
параметр -z
nodeflib, то общие
объекты в
путях по
умолчанию
будут
пропущены.
Общие
объекты,
установленные
в каталоги
для
аппаратных
возможностей
(см. далее)
имеют
больший
приоритет,
чем
остальные
общие
объекты.
- (5)
- В
каталоге
по
умолчанию
/lib и затем в
/usr/lib (на
некоторых
64-битных
архитектурах
путь по
умолчанию
для
64-битных
объектов —
/lib64 и затем
/usr/lib64). Если
при сборке
двоичного
файла
компоновщику
был указан
параметр -z
nodeflib, то этот
шаг
пропускается.
In several places, the dynamic linker expands dynamic string tokens:
- •
- In the environment variables LD_LIBRARY_PATH,
LD_PRELOAD, and LD_AUDIT,
- •
- inside the values of the dynamic section tags
DT_NEEDED, DT_RPATH, DT_RUNPATH, DT_AUDIT, and
DT_DEPAUDIT of ELF binaries,
- •
- in the arguments to the ld.so command line options
--audit, --library-path, and --preload (see below),
and
- •
- in the filename arguments to the dlopen(3) and
dlmopen(3) functions.
The substituted tokens are as follows:
-
$ORIGIN (или
${ORIGIN})
- Она
раскрывается
в каталог,
содержащий
программу
или общий
объект.
Таким
образом,
приложение,
расположенное
в somedir/app может
компилироваться
с
-
gcc -Wl,-rpath,'$ORIGIN/../lib'
- для того,
чтобы оно
могло
найти
связанный
общий
объект в
somedir/lib и не
важно где в
иерархии
каталогов
будет
находиться
somedir. Это
облегчает
создание
приложений
«под ключ»,
которые
вместо
установки
в
специальные
каталоги,
можно
просто
распаковать
в любой
каталог, и
они всё
равно
найдут
свои общие
объекты.
-
$LIB (или ${LIB})
- Она
раскрывается
в lib или lib64, в
зависимости
от
архитектуры
(например,
на x86-64 она
заменяется
на lib64, а на x86-32
она
заменяется
на lib).
-
$PLATFORM (или
${PLATFORM})
- Преобразуется
в строку,
соответствующую
типу
процессора
узла
(например,
«x86_64»). На
некоторых
архитектурах
ядро Linux не
предоставляет
строку
платформы
динамическому
компоновщику.
Значение
этой
строки
берётся из
значения
AT_PLATFORM
вспомогательного
вектора
(смотрите
getauxval(3)).
Note that the dynamic string tokens have to be quoted properly when set from a
shell, to prevent their expansion as shell or environment variables.
-
--argv0 string
(начиная с glibc
2.33)
- Set argv[0] to the value string before
running the program.
-
--audit
список
- Использовать
объекты из
списка в
качестве
аудиторов.
Объекты в
list
разделяются
двоеточиями.
- --inhibit-cache
- Не
использовать
/etc/ld.so.cache.
-
--library-path
путь
- Использовать
путь
вместо
значения
переменной
окружения
LD_LIBRARY_PATH
(смотрите
далее).
Имена ORIGIN, LIB
и PLATFORM
рассматриваются
также как
переменная
окружения
LD_LIBRARY_PATH.
-
--inhibit-rpath
список
- Игнорировать
информацию
в RPATH и RUNPATH об
именах
объектов
из списка.
Этот
параметр
игнорируется
в режиме
безопасного
выполнения
(смотрите
далее).
Объекты в
list
разделяются
двоеточиями
или
пробелами.
- --list
- Выдать
список
всех
зависимостей
и как они
удовлетворяются.
-
--list-tunables (since glibc 2.33)
- Print the names and values of all tunables, along with the
minimum and maximum allowed values.
-
--preload list
(начиная с glibc
2.30)
- Предварительно
загружать
объекты,
указанные
в list.
Объекты в
list
разделяются
двоеточиями
или
пробелами.
Предварительная
загрузка
объектов
описана
далее, в
разделе о
переменной
окружения
LD_PRELOAD.
- В
отличии от
LD_PRELOAD,
параметр
--preload
предоставляет
способ
выполнить
предварительную
загрузку
для одного
исполняемого
файла не
влияя при
этом на
предварительную
загрузку
его
дочерних
процессов,
которые
запускает
новая
программа.
- --verify
- Проверить,
что
программа
является
динамически
скомпонованной
и что
компоновщик
понимает
её формат.
На
поведение
динамического
компоновщика
влияют
различные
переменные
окружения.
В целях
безопасности,
если
динамический
компоновщик
определяет,
что
двоичный
файл
должен
быть
запущен в
безопасном
режиме
выполнения,
действие
некоторых
переменных
окружения
отменяется
или
изменяется;
кроме
этого, эти
переменные
окружения
удаляются
из
окружения,
и
программа
даже не
увидит, что
они
определены.
Некоторые
из этих
переменных
окружения
влияют на
работу
самого
динамического
компоновщика,
и они
описаны
ниже.
Другие
переменные
окружения,
учитываемые
подобным
образом:
GCONV_PATH,
GETCONF_DIR,
HOSTALIASES,
LOCALDOMAIN,
LOCPATH,
MALLOC_TRACE,
NIS_PATH,
NLSPATH,
RESOLV_HOST_CONF,
RES_OPTIONS,
TMPDIR и
TZDIR.
Двоичный
файл
выполняется
в
безопасном
режиме
выполнения,
если
запись
AT_SECURE в
вспомогательном
векторе
(смотрите
getauxval(3))
содержит
ненулевое
значение.
Эта запись
может
иметь
ненулевое
значение
по разным
причинам:
- •
- У
процесса
различаются
реальный и
эффективный
идентификатор
пользователя/группы.
Обычно, это
происходит
в
результате
выполнения
программ с
установленным
битом set-user-ID
или set-group-ID.
- •
- Процесс
с
пользовательским
ID не равным root,
выполняет
файл,
который
присваивает
мандаты
процессу.
- •
- Ненулевое
значение
может
установить
Linux Security Module.
Среди
наиболее
важных
переменных
окружения
следует
выделить
следующие:
-
LD_ASSUME_KERNEL
(начиная с glibc
2.2.3)
- Каждый
общий
объект
может
сообщать
динамическому
компоновщику
о
требуемой
минимальной
версии
ядерного ABI
(это
требование
кодируется
в разделе ELF
note, который
можно
просмотреть
с помощью
readelf -n, под
меткой NT_GNU_ABI_TAG).
Во время
выполнения
динамический
компоновщик
определяет
версию ABI
запущенного
ядра и не
будет
загружать
общие
объекты, у
которых
минимальная
версия ABI
превышает
версию
ядра.
-
LD_ASSUME_KERNEL
можно
использовать,
чтобы
заставить
динамический
компоновщик
предполагать,
что он
работает в
системе с
другой
версией
ядра ABI.
Например,
следующая
команда
заставляет
динамический
компоновщик
при
загрузке
общих
объектов,
требуемых
myprog,
предполагать,
что он
запущен на
Linux с версией
2.2.5:
-
$ LD_ASSUME_KERNEL=2.2.5 ./myprog
- В
системах,
предоставляющих
несколько
версий
общего
объекта (в
различных
каталогах
пути
поиска) с
разными
требованиями
к
минимальной
версии
ядра ABI, LD_ASSUME_KERNEL
может
использоваться
для выбора
версии
объекта,
которую
нужно
задействовать
(в
зависимости
от порядка
поиска в
каталогах).
- Исторически,
свойство
LD_ASSUME_KERNEL
наиболее
часто
использовалось
при ручном
выборе
старых
реализаций
нитей POSIX LinuxThreads в
системах,
которые
предоставляли
и LinuxThreads, и NPTL (в
последствии
стала
базовой в
таких
системах);
смотрите
pthreads(7).
-
LD_BIND_NOW
(начиная с glibc
2.1.1)
- Если
переменная
содержит
непустую
строку, то
динамический
компоновщик
будет
искать все
символы
при
запуске
программы
вместо
того, чтобы
отложить
поиск
вызовов
функций до
момента,
когда они
встретятся
в первый
раз. Это
полезно
при
отладке.
- LD_LIBRARY_PATH
- A list of directories in which to search for ELF libraries
at execution time. The items in the list are separated by either colons or
semicolons, and there is no support for escaping either separator. A
zero-length directory name indicates the current working directory.
- Данная
переменная
игнорируется
в режиме
безопасного
выполнения.
- Within the pathnames specified in LD_LIBRARY_PATH,
the dynamic linker expands the tokens $ORIGIN, $LIB, and
$PLATFORM (or the versions using curly braces around the names) as
described above in Dynamic string tokens. Thus, for example, the
following would cause a library to be searched for in either the
lib or lib64 subdirectory below the directory containing the
program to be executed:
-
$ LD_LIBRARY_PATH='$ORIGIN/$LIB' prog
- (Обратите
внимание
на
одиночные
кавычки,
которые не
позволяют
раскрывать
$ORIGIN и $LIB как
переменные
оболочки!)
- LD_PRELOAD
- Список
дополнительных,
указанных
пользователем,
общих
объектов ELF,
которые
будут
загружены
раньше чем
все
остальные.
Может
использоваться
для
выборочной
замены
функций из
других
общих
объектов.
- Элементы
списка
разделяются
пробелами
или
двоеточиями,
экранирование
этих
разделителей
не
поддерживается.
Объекты
ищутся
согласно
правилам
из
ОПИСАНИЯ.
Найденные
объекты
добавляются
в карту
связей
согласно
списку, в
порядке
слева
направо.
-
В режиме
безопасного
выполнения
предварительная
загрузка
файлов с
символами
косой
черты не
выполняется.
Кроме того,
загружаются
общие
объекты
только из
стандартных
каталогов
поиска и с
включённым
битом
режима set-user-ID
(что не
типично).
- Within the names specified in the LD_PRELOAD list,
the dynamic linker understands the tokens $ORIGIN, $LIB, and
$PLATFORM (or the versions using curly braces around the names) as
described above in Dynamic string tokens. (See also the discussion
of quoting under the description of LD_LIBRARY_PATH.)
- Есть
несколько
методов
указания
библиотек
для
предварительной
загрузки,они
обрабатываются
в
следующем
порядке:
- (1)
- Переменная
окружения
LD_PRELOAD.
- (2)
- Параметр
командной
строки --preload,
при
непосредственном
вызове
динамического
компоновщика.
- (3)
- Файл /etc/ld.so.preload
(смотрите
ниже).
- LD_TRACE_LOADED_OBJECTS
- Если
установлена
(любое
значение),
то вместо
нормального
запуска
программы
будут
выданы её
динамические
зависимости,
как если бы
она была
запущена
ldd(1).
Также
существует
большое
количество
более или
менее
полезных
переменных,
многие из
которых
устарели
или
предназначены
только для
внутреннего
использования.
-
LD_AUDIT
(начиная с glibc
2.4)
- Определяемый
пользователем
список
общих
объектов ELF,
которые
будут
загружены
раньше
всех
остальных
в
отдельное
пространство
имён
компоновщика
(т. е., они не
внедряются
вместо
обычных
привязываемых
символов,
которые
могли бы
быть в этом
процессе).
Эти
объекты
можно
использовать
для
контрольной
проверки
операций
динамического
компоновщика.
Элементы в
списке
разделяются
двоеточиями
и
двоеточия
нельзя
экранировать.
- Переменная
LD_AUDIT
игнорируется
в режиме
безопасного
выполнения.
- The dynamic linker will notify the audit shared objects at
so-called auditing checkpoints—for example, loading a new shared
object, resolving a symbol, or calling a symbol from another shared
object—by calling an appropriate function within the audit shared
object. For details, see rtld-audit(7). The auditing interface is
largely compatible with that provided on Solaris, as described in its
Linker and Libraries Guide, in the chapter Runtime Linker
Auditing Interface.
- Within the names specified in the LD_AUDIT list, the
dynamic linker understands the tokens $ORIGIN, $LIB, and
$PLATFORM (or the versions using curly braces around the names) as
described above in Dynamic string tokens. (See also the discussion
of quoting under the description of LD_LIBRARY_PATH.)
- Начиная
с glibc 2.13 в
режиме
безопасного
выполнения
имена в
списке
контрольной
проверки,
содержащие
символы
косой
черты,
игнорируются,
и
загружаются
только
общие
объекты с
включённым
битом
режима set-user-ID
из
стандартных
каталогов
поиска.
-
LD_BIND_NOT
(начиная с glibc
2.1.95)
- Если эта
переменная
окружения
не равна
пустой
строке, то
не
обновлять
GOT (global offset table —
таблицу
глобальных
перемещений)
и PLT (procedure linkage table —
таблицу
компоновки
процедур)
после
определения
символа
функции.
Совместное
использовав
эту
переменную
с LD_DEBUG (с
категориями
bindings и symbols),
можно
увидеть
все
привязки
функции во
время
выполнения.
-
LD_DEBUG
(начиная с glibc
2.1)
- Выводить
подробную
отладочную
информацию
об
операции
динамического
компоновщика.
Содержимое
этой
переменной
равно
одной или
нескольким
следующим
категориям,
разделённым
двоеточием,
запятой
или (если
значение в
кавычках)
пробелом:
- help
- Слово help
в значении
этой
переменной
заставляет
не
выполнять
указанную
программу
и выводит
справочное
сообщение
со списком
категорий,
которые
можно
задать в
этой
переменной
окружения.
- all
- Показать
всю
отладочную
информацию
(за
исключением
statistics и unused;
смотрите
ниже).
- bindings
- Показать
информацию
о том,
какое
определение
привязано
к каждому
символу.
- files
- Показать
ход
обработки
входного
файла.
- libs
- Показать
пути
поиска
библиотек.
- reloc
- Показать
обработку
перемещений.
- scopes
- Показать
информацию
об
областях.
- statistics
- Показать
статистику
по
перемещениям.
- symbols
- Показать
пути
поиска при
нахождении
каждого
символа.
- unused
- Определить
неиспользуемые
DSO.
- versions
- Показать
зависимости
от версий.
- Начиная
с glibc 2.3.4, LD_DEBUG
игнорируется
в режиме
безопасного
выполнения,
если
существует
файл /etc/suid-debug
(содержимое
файла не
важно).
-
LD_DEBUG_OUTPUT
(начиная с glibc
2.1)
- По
умолчанию
вывод LD_DEBUG
записывается
в
стандартный
поток
ошибок.
Если LD_DEBUG_OUTPUT
определена,
то вывод
записывается
в
указанной
значением
файл с
добавлением
суффикса
«.» (точка) ID
процесса.
- Переменная
LD_DEBUG_OUTPUT
игнорируется
в режиме
безопасного
выполнения.
-
LD_DYNAMIC_WEAK
(начиная с glibc
2.1.91)
- По
умолчанию
при поиске
общих
библиотек
для
разрешения
символьной
ссылки
динамический
компоновщик
будет
использовать
первое
найденное.
- Old glibc versions (before glibc 2.2), provided a different
behavior: if the linker found a symbol that was weak, it would remember
that symbol and keep searching in the remaining shared libraries. If it
subsequently found a strong definition of the same symbol, then it would
instead use that definition. (If no further symbol was found, then the
dynamic linker would use the weak symbol that it initially found.)
- Поведение
старой glibc
является
нестандартным
(стандартной
практикой
является
учёт
различия
слабых и
строгих
символов
только в
момент
статической
компоновки).
Текущее
поведение
динамического
компоновщика
появилось
в glibc 2.2 (такое
поведение
предоставлялось
в то время
большинством
других
реализаций).
- Создание
переменной
окружения
LD_DYNAMIC_WEAK (с любым
значением)
включает
старое
(нестандартное)
поведение
glibc, тем самым,
слабые
символы
одной
общей
библиотеки
могут
заменяться
строгими
символами,
обнаруженными
в другой
библиотеке
(заметим,
что даже
когда эта
переменная
установлена,
строгие
символы
общей
библиотеки
не заменят
слабые
определения
того же
символа в
основной
программе).
- Начиная
с glibc 2.3.4, LD_DYNAMIC_WEAK
игнорируется
в режиме
безопасного
выполнения.
-
LD_HWCAP_MASK
(начиная с glibc
2.1)
- Маска
для
совместимости
с
аппаратными
возможностями.
-
LD_ORIGIN_PATH
(начиная с glibc
2.1)
- Путь, где
находится
двоичный
файл.
- Начиная
с glibc 2.4, LD_ORIGIN_PATH
игнорируется
в режиме
безопасного
выполнения.
-
LD_POINTER_GUARD (from glibc 2.4 to glibc 2.22)
- Значение
0 отключает
защиту
указателя.
Любое
другое
значение
включает
защиту
указателя,
что
является
действием
по
умолчанию.
Защита
указателя
— это
механизм
безопасности,
в
результате
которого
некоторые
указатели
на код,
хранящийся
в
перезаписываемой
памяти
программы
(адреса
возврата,
сохраняемые
setjmp(3) или
указатели
на функцию,
используемые
различными
внутренними
функциями
glibc),
искажаются
полупроизвольным
образом,
что
затрудняет
атакующему
подбор
указателей
для
проведения
атак
переполнения
буфера или
срыва
стека.
Начиная с glibc
2.23, LD_POINTER_GUARD можно
больше не
использовать
для
отключения
защиты
указателя,
так как
теперь она
всегда
включена.
-
LD_PROFILE
(начиная с glibc
2.1)
- В
переменной
задаётся
имя
динамического
объекта
(одного)
для
профилирования,
в виде пути
или имени so.
Результат
профилирования
записывается
в файл с
именем: «
$LD_PROFILE_OUTPUT/ $LD_PROFILE».
- Начиная
с glibc 2.2.5, LD_PROFILE
игнорируется
в режиме
безопасного
выполнения.
-
LD_PROFILE_OUTPUT
(начиная с glibc
2.1)
- Каталог,
куда будет
сохраняться
результат
работы с
LD_PROFILE. Если
эта
переменная
не
определена
или её
значение
равно
пустой
строке, то
по
умолчанию
результат
будет
сохранён в
каталог
/var/tmp.
- Переменная
LD_PROFILE_OUTPUT
игнорируется
в режиме
безопасного
выполнения;
вместо неё
всегда
используется
/var/profile (это
относится
только к glibc
до версии 2.2.5,
так как в
более
новых
версиях LD_PROFILE
также
игнорируется
в режиме
безопасного
выполнения).
-
LD_SHOW_AUXV
(начиная с glibc
2.1)
- Если эта
переменная
окружения
определена
(с любым
значением),
то
показывается
вспомогательный
массив,
переданный
из ядра
(смотрите
также getauxval(3)).
- Начиная
с glibc 2.3.4, LD_SHOW_AUXV
игнорируется
в режиме
безопасного
выполнения.
-
LD_TRACE_PRELINKING
(начиная с glibc
2.4)
- Если эта
переменная
окружения
определена,
то
выполнять
трассировку
объекта
предварительной
компоновки,
чьё имя
указано в
этой
переменной
окружения
(для
получения
списка
трассируемых
объектов
используйте
ldd(1)). Если имя
объекта не
распознано,
то
трассируется
все
действия
предварительной
компоновки
(prelinking activity).
-
LD_USE_LOAD_BIAS
(начиная с glibc
2.3.3)
- По
умолчанию
(т. е., если
переменная
не
определена)
исполняемые
и
предварительно
скомпонованные
объекты
учитывают
базовые
адреса
общих
объектов,
от которых
они
зависят, а
(предварительно
не
скомпонованные)
перемещаемые
исполняемые
(PIE) и другие
общие
объекты не
учитывают
их. Если
переменной
LD_USE_LOAD_BIAS
присвоено
значение 1,
то и
исполняемые
файлы, и PIE
учитывают
базовые
адреса.
Если
значение
переменной
LD_USE_LOAD_BIAS равно 0,
то ни
исполняемые
файлы ни PIE
не
учитывают
базовые
адреса.
- Начиная
с glibc 2.3.3, данная
переменная
игнорируется
в режиме
безопасного
выполнения.
-
LD_VERBOSE
(начиная с glibc
2.1)
- Если
значение
равно
непустой
строке, то
выводится
информация
о символах
программы
(если также
установлена
переменная
окружения
LD_TRACE_LOADED_OBJECTS).
-
LD_WARN
(начиная с glibc
2.1.3)
- Если
значение
равно
непустой
строке, то
выдаются
предупреждения
о
ненайденных
символах.
-
LD_PREFER_MAP_32BIT_EXEC
(только для
x86-64; начиная с
glibc 2.23)
- Согласно
руководству
по
оптимизации
ПО Intel Silvermont для
64-битных
приложений,
выполнение
предсказания
ветвления
может
отразиться
негативным
образом,
если цель
ветви
находится
дальше чем
4 ГБ от
ветви. Если
эта
переменная
окружения
установлена
(любое
значение),
то
динамический
компоновщик
сначала
попытается
отобразить
исполняемые
страницы с
помощью mmap(2)
с флагом MAP_32BIT
и, если это
не удастся,
то
выполнит
отображение
без флага.
Примечание:
с флагом MAP_32BIT
отображение
выполняется
в нижние
2 ГБ (не 4 ГБ)
адресного
пространства.
- Так как
при MAP_32BIT
сокращается
адресный
диапазон,
доступный
для
случайного
выравнивания
адресного
пространства
(ASLR), то LD_PREFER_MAP_32BIT_EXEC
всегда
отключается
в режиме
безопасного
выполнения.
- /lib/ld.so
- динамический
компоновщик/загрузчик
a.out
-
/lib/ld-linux.so.{1,2}
- динамический
компоновщик/загрузчик
ELF
- /etc/ld.so.cache
- Файл с
скомпилированным
списком
каталогов,
в которых
производится
поиск
общих
объектов и
сортированный
список
общих
объектов-кандидатов.
Смотрите
ldconfig(8).
- /etc/ld.so.preload
- Файл со
списком
общих
объектов ELF
(через
пробел),
которые
будут
загружены
перед
программой.
Смотрите
описание
LD_PRELOAD выше.
Если
одновременно
существуют
LD_PRELOAD и /etc/ld.so.preload, то
библиотеки,
указанные
в LD_PRELOAD,
загружаются
первыми.
Файл /etc/ld.so.preload
влияет на
всю
систему,
вызывая
предварительную
загрузку
указанных
библиотек
для всех
программ,
выполняемых
в системе
(обычно,
это
нежелательно
и
используется
как
спасательное
средство,
например,
для
временного
обхода
проблемы
неправильно
настроенных
библиотек).
- lib*.so*
- общие
объекты
Некоторые
общие
объекты
скомпилированы
с
использованием
специальных
аппаратных
инструкций,
которые
существуют
не в каждом
ЦП. Такие
объекты
должны
быть
установлены
в каталоги,
чью имена
(например,
/usr/lib/sse2/)
определяют
требования
к
аппаратным
возможностям.
Динамический
компоновщик
проверяет
эти
каталоги
учитывая
аппаратуру
машины и
выбирает
наиболее
подходящую
версию
требуемого
общего
объекта.
Каталоги
аппаратных
возможностей
могут
каскадироваться
для
объединения
свойств ЦП.
Список
имён
поддерживаемых
аппаратных
возможностей
зависит от
ЦП. В
настоящее
время
распознаются
следующие
имена:
- Alpha
- ev4, ev5, ev56, ev6, ev67
- MIPS
- loongson2e, loongson2f, octeon, octeon2
- PowerPC
- 4xxmac, altivec, arch_2_05, arch_2_06, booke, cellbe, dfp,
efpdouble, efpsingle, fpu, ic_snoop, mmu, notb, pa6t, power4, power5,
power5+, power6x, ppc32, ppc601, ppc64, smt, spe, ucache, vsx
- SPARC
- flush, muldiv, stbar, swap, ultra3, v9, v9v, v9v2
- s390
- dfp, eimm, esan3, etf3enh, g5, highgprs, hpage, ldisp, msa,
stfle, z900, z990, z9-109, z10, zarch
- x86 (только
32-битные)
- acpi, apic, clflush, cmov, cx8, dts, fxsr, ht, i386, i486,
i586, i686, mca, mmx, mtrr, pat, pbe, pge, pn, pse36, sep, ss, sse, sse2,
tm
ld(1),
ldd(1),
pldd(1),
sprof(1),
dlopen(3),
getauxval(3),
elf(5),
capabilities(7),
rtld-audit(7),
ldconfig(8),
sln(8)
Русский
перевод
этой
страницы
руководства
был сделан
Artyom Kunyov <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Katrin Kutepova <
[email protected]>,
Konstantin Shvaykovskiy <
[email protected]>, Yuri Kozlov
<
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]