Linux Man на русском

  User    Syst    Libr    Device    Files    Other    Admin  



   uselib - загрузить динамическую библиотеку

uselib(2) загрузить динамическую библиотеку


ОБЗОР

#include <unistd.h>

int uselib(const char *library);


ОПИСАНИЕ

Системный вызов uselib() выполняет загрузку динамической библиотеки для использования в вызывающем процессе. Она задаётся именем файла. Адрес загрузки находится в ней самой. Библиотека может быть в любом распознаваемом формате.


ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.


ОШИБКИ

В дополнении к тем кодам ошибок, которые возвращаются вызовами open(2) и mmap(2), также могут быть следующие коды ошибок:

EACCES На библиотеку, заданную library, нет прав на чтение или исполнение, или вызывающий не имеет прав на поиск в одном из каталогов, указанных в пути. (Смотрите также path_resolution(7).)

ENFILE Достигнуто максимальное количество открытых файлов в системе.

ENOEXEC Библиотека, заданная library, имеет неизвестный исполняемый тип; например, в ней нет корректных идентификационных чисел (magic numbers).


СООТВЕТСТВИЕ СТАНДАРТАМ

Вызов uselib() применяется только в Linux и поэтому не должен использоваться в программах, предназначенных для переноса на другие платформы.


ЗАМЕЧАНИЯ

uselib() использовался в коде запуска (startup code) ранних версий libc для загрузки динамических библиотек по именам из массива имён, находящегося в исполняемом файле.

Начиная с libc 4.3.2, код запуска дополняется эти имена "/usr/lib", "/lib" и "" перед тем как отказаться от загрузки. В libc 4.3.4 и более поздних эти имена ищутся в каталогах, содержащихся в переменной окружения LD_LIBRARY_PATH, и если они не находятся, то выполняется попытка поиска с добавлением "/usr/lib", "/lib" и "/".

Начиная libc 4.4.4 загружается только библиотека "/lib/ld.so" для того, чтобы она смогла загрузить оставшиеся необходимые библиотеки (используя этот системный вызов). То же происходит и в libc5.

В glibc2 не используется этот вызов.