со страницы руководства:
dlclose ()
Функция dlclose () уменьшает счетчик ссылок на дескрипторе динамической библиотеки. Если количество ссылок падает до нуля, и никакие другие загруженные библиотеки не используют в нем символы, динамическая библиотека выгружается.
Функция dlclose () возвращает 0 в случае успеха и ненулевое значение в случае ошибки.
Таким образом, подсчет ссылок выполняется автоматически, но тот факт, что этот вызов является последним и действительно выгружает библиотеку, не указывается. Вам нужно посчитать себя, если вам это нужно.
Или вы можете dlopen
с RTLD_NOLOAD
после dlclose
:
Не загружайте библиотеку. Это можно использовать для проверки, является ли библиотека уже резидентной (dlopen () возвращает NULL, если это не так, или дескриптор библиотеки, если она является резидентной).
(Обратите внимание, что вам потребуется dlclose()
еще раз, если вы получили ссылку. Это очень сложно, поэтому убедитесь, что все возможные манипуляции происходят в одном потоке или сериализуются.)
Вас может заинтересовать опция RTLD_NODELETE
:
Не выгружать библиотеку во время dlclose (). Следовательно, статические переменные библиотеки
не инициализируется повторно, если библиотека будет перезагружена с помощью dlopen () позднее. Этот флаг не
указано в POSIX.1-2001.