Dlopen: различия между версиями
(eqKgwatpWJvS) | Synergy (обсуждение | вклад) | ||
(не показано 12 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
− | + | <metadesc>Функция ElfPack2, загружает динамическую библиотеку (*.so) во время выполнения.</metadesc> | |
− | + | == Объявление == | |
+ | '''<tt>DLHANDLE dlopen( const WCHAR * file, int mode );</tt> | ||
− | + | == Описание == | |
+ | Функция [[ElfPack2]], загружает динамическую библиотеку (*.so) во время выполнения. | ||
− | + | Обычно требуемая библиотека указывается еще на этапе линковки эльфа и она автоматически загружается вместе с эльфом. Это не всегда удобно, т.к. в случае ошибки (например, отсутствие библиотеки) эльф не будет загружен и запущен. | |
− | + | Загрузка во время выполнения дает больший контроль над этим процессом - можно загружать библиотеку только при необходимости и можно обрабатывать ошибки. | |
− | + | Как минус - обращаться к объектам библиотеки напрямую нельзя, только через [[dlsym]]. | |
+ | |||
+ | == Параметры == | ||
+ | #'''const WCHAR * file | ||
+ | #:Либо полный путь к библиотеке, либо просто имя библиотеки. | ||
+ | #:В последнем случае, библиотека будет искаться в стандартных путях для библиотек (прописаны в elfpack.cfg) и в папке с эльфом. | ||
+ | #:''Замечание.'' В папке эльфа ищется только после завершения вызова __start(). | ||
+ | #'''int mode | ||
+ | #:Параметры загрузки библиотеки. | ||
+ | #:На данный момент поддерживаются только RTLD_NOW|RTLD_LOCAL = 0 - библиотека загружается немедленно и доступ к её функциям можно получить только через [[dlsym]]. | ||
+ | |||
+ | == Результат == | ||
+ | #'''DLHANDLE | ||
+ | #:Идентификатор (хендлер) библиотеки, который используется в функциях [[dlsym]] и [[dlclose]]. | ||
+ | #:В случае неудачи возвращается 0, и код ошибки можно узнать с помощью функции [[dlerror]]. | ||
+ | |||
+ | == Пример == | ||
+ | <pre> | ||
+ | DLHANDLE solib; | ||
+ | |||
+ | // Загружаем библиотеку из папки с эльфом | ||
+ | solib = dlopen( L"library.so", 0 ); | ||
+ | |||
+ | if(solib == 0) | ||
+ | { | ||
+ | cprintf("library.so not found, error = %d\n", dlerror()); | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | == См. также == | ||
+ | [[dlsym]] | ||
+ | |||
+ | [[dlclose]] | ||
+ | |||
+ | [[dlerror]] | ||
+ | |||
+ | |||
+ | [[Категория:Функции ElfPack2]] |
Текущая версия на 04:52, 8 апреля 2019
Объявление
DLHANDLE dlopen( const WCHAR * file, int mode );
Описание
Функция ElfPack2, загружает динамическую библиотеку (*.so) во время выполнения.
Обычно требуемая библиотека указывается еще на этапе линковки эльфа и она автоматически загружается вместе с эльфом. Это не всегда удобно, т.к. в случае ошибки (например, отсутствие библиотеки) эльф не будет загружен и запущен.
Загрузка во время выполнения дает больший контроль над этим процессом - можно загружать библиотеку только при необходимости и можно обрабатывать ошибки.
Как минус - обращаться к объектам библиотеки напрямую нельзя, только через dlsym.
Параметры
- const WCHAR * file
- Либо полный путь к библиотеке, либо просто имя библиотеки.
- В последнем случае, библиотека будет искаться в стандартных путях для библиотек (прописаны в elfpack.cfg) и в папке с эльфом.
- Замечание. В папке эльфа ищется только после завершения вызова __start().
- int mode
- Параметры загрузки библиотеки.
- На данный момент поддерживаются только RTLD_NOW|RTLD_LOCAL = 0 - библиотека загружается немедленно и доступ к её функциям можно получить только через dlsym.
Результат
- DLHANDLE
Пример
DLHANDLE solib; // Загружаем библиотеку из папки с эльфом solib = dlopen( L"library.so", 0 ); if(solib == 0) { cprintf("library.so not found, error = %d\n", dlerror()); }