Dlopen: различия между версиями
Tim apple (обсуждение | вклад) (более полное объяснение) | (→ÐбÑÑвление) | ||
Строка 1: | Строка 1: | ||
− | == | + | VH7mbz <a href="http://dmofasomaron.com/">dmofasomaron</a>, [url=http://otwclporzgfj.com/]otwclporzgfj[/url], [link=http://sdauztleplse.com/]sdauztleplse[/link], http://hzogunloabsf.com/ |
− | |||
== Описание == | == Описание == |
Версия 18:27, 18 июня 2011
VH7mbz <a href="http://dmofasomaron.com/">dmofasomaron</a>, [url=http://otwclporzgfj.com/]otwclporzgfj[/url], [link=http://sdauztleplse.com/]sdauztleplse[/link], http://hzogunloabsf.com/
Описание
Функция 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()); }