Dlopen: различия между версиями
Tim apple (обсуждение | вклад) (более полное объяснение) | Synergy (обсуждение | вклад) | ||
(не показано 38 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
+ | <metadesc>Функция ElfPack2, загружает динамическую библиотеку (*.so) во время выполнения.</metadesc> | ||
+ | |||
== Объявление == | == Объявление == | ||
'''<tt>DLHANDLE dlopen( const WCHAR * file, int mode );</tt> | '''<tt>DLHANDLE dlopen( const WCHAR * file, int mode );</tt> |
Текущая версия на 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()); }