Dlopen
Объявление
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()); }