table of contents
USELIB(2) | Руководство программиста Linux | USELIB(2) |
ИМЯ¶
uselib - загрузить динамическую библиотеку
СИНТАКСИС¶
#include <unistd.h>
int uselib(const char *library);
Замечание: В заголовочных файлах glibc этой системный вызов отсутствует; смотрите ЗАМЕЧАНИЯ.
ОПИСАНИЕ¶
Системный вызов uselib() выполняет загрузку динамической библиотеки для использования в вызывающем процессе. Она задаётся именем файла. Адрес загрузки находится в ней самой. Библиотека может быть в любом распознаваемом формате.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
В дополнении к тем кодам ошибок, которые возвращаются вызовами open(2) и mmap(2), также могут быть следующие коды ошибок:
- EACCES
- На библиотеку, заданную library, нет прав на чтение или исполнение, или вызывающий не имеет прав на поиск в одном из каталогов, указанных в пути. (Смотрите также path_resolution(7).)
- ENFILE
- Достигнуто максимальное количество открытых файлов в системе.
- ENOEXEC
- Библиотека, заданная library, имеет неизвестный исполняемый тип; например, в ней нет корректных идентификационных чисел (magic numbers).
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Вызов uselib() применяется только в Linux и поэтому не должен использоваться в программах, предназначенных для переноса на другие платформы.
ЗАМЕЧАНИЯ¶
Устаревший системный вызов, не поддерживается glibc. В заголовочных файлах glibc он не объявлен, но в недавнем прошлом версии glibc до 2.23 экспортировали ABI для этого системного вызова. Поэтому, чтобы получить данный системный вызов достаточно вручную объявить интерфейс в своём коде; или же можно вызвать его через syscall(2).
В очень старых версиях libc вызов uselib() использовался для загрузки динамических библиотек по именам из массива имён, находящегося в исполняемом файле.
Начиная с 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 не используется этот вызов.
Начиная с Linux 3.15 данный системный вызов доступен только, если ядро собрано с параметром CONFIG_USELIB.
СМ. ТАКЖЕ¶
ar(1), gcc(1), ld(1), ldd(1), mmap(2), open(2), dlopen(3), capabilities(7), ld.so(8)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 сентября 2017 г. | Linux |