Короткий опис
Ці функції забезпечують стерпний спосіб динамічного завантаження об'єктних файлів (відомі як 'plug-ins'). Поточна реалізація підтримує всі системи які забезпечують виконання dlopen () (наприклад Linux / Sun), а також HP-UX через механізм shl_load () і Windows через DLLs.
Програми які передбачається використовувати з цими функціями повинні бути слінковани з бібліотеками виведення (output) за допомогою команди pkg-config --libs gmodule-2.0.
Для їх використання ви спочатку повинні визначити чи підтримується динамічне завантаження на використовуваної платформі за допомогою виклику g_module_supported (). Якщо підтримується, то ви можете відкривати модулі за допомогою g_module_open (). шукати модульні ідентифікатори (наприклад імена функцій) за допомогою g_module_symbol (). а потім закривати модулі за допомогою g_module_close (). g_module_name () повертає ім'я файлу поточного відкритого модуля.
Якщо будь-яка з описаних вище функцій завершується невдачею, опис помилки можна знайти за допомогою g_module_error ().
GModule реалізує особливість підрахунку посилань для відкритих модулів і підтримку функцій обробки переривань в модулі, яка викликається коли модуль завантажується і вивантажується (дивіться GModuleCheckInit і GModuleUnload).
Якщо ваш модуль вводить статичні дані для загальних підсистем в виконуваної програмою, наприклад через виклик g_quark_from_static_string ( "my-module-stuff"). він повинен бути впевнений що ніколи не вивантажиться за допомогою виклику g_module_make_resident ().
Приклад 12. Calling a function defined in a GModule
g_module_build_path ()
Стерпний спосіб створення імені файлу модуля. Від платформи специфічні префікс і суфікс додаються для імені файлу, якщо необхідно і результат додається в каталог, використовуючи правильний символьний роздільник.
Параметр directory повинен визначати каталог де де може бути знайдений модуль. Він може бути NULL або символом нового рядка вказуючи що модуль знаходиться в стандартному від платформи залежному каталозі, хоча це не рекомендується, так як може бути знайдений неправильний модуль.
Наприклад, виклик g_module_build_path () в системі Linux з параметром directory рівним значенню / lib і параметром module_name рівним значенню "mylibrary" поверне /lib/libmylibrary.so. В системі Windows, використання \ Windows як значення параметра directory поверне \ Windows \ mylibrary.dll.
каталог де знаходиться модуль. Може бути NULL або символом нового рядка вказуючи що використовується стандартний платформо-залежний каталог, хоча це не рекомендується.
абсолютний шлях модуля, включаючи стандартний бібліотечний префікс і суфікс. Повинен звільнятися коли більше не потрібен.
g_module_open ()
Відкриває модуль. Якщо модуль вже відкритий, то збільшує кількість посилань.
Перш за все g_module_open () намагається відкрити file_name як модуль. Якщо це не вдається і file_name має суфікс ".la" (і є архів libtool), вона пробує відкрити відповідний модуль. Якщо зазнає невдачі і він не має належного суфікса модуля для платформи (G_MODULE_SUFFIX), цей суфікс буде приставлений і відповідний модуль буде відкритий. Якщо це не вдається і file_name не має суфікса ".la", цей суфікс підставляється і g_module_open () намагається відкрити відповідний модуль. Якщо і це не вдається, то повертається NULL.
ім'я файлу містить модуль, або NULL для отримання GModule представляє безпосередньо основну програму.