Если dlclose
уменьшает счетчик ссылок до нуля, а библиотека фактически выгружена, любая дальнейшая перезагрузка библиотеки должна сбросить все переменные со статической продолжительностью хранения в библиотеке до их исходных значений.
Однако,если библиотека была открыта более одного раза, все, кроме последнего вызова dlclose
, просто уменьшат счетчик ссылок.Иногда может быть неочевидным, была ли библиотека открыта более одного раза, поскольку она могла быть загружена как зависимость какой-либо другой библиотеки без вашего ведома, если только это не модуль, локальный для вашей программы, поэтому, вероятно, не стоит полагаться на неек этому поведению «сброса».
Занятый русский добавил:
Даже если библиотека dlopen()
ed и dlclose()
d ровно один раз, и не зависит от чего-либоиначе, ссылка на символы из него (через dlsym()
) также увеличивает счетчик ссылок (и делает библиотеку не выгружаемой);по крайней мере, в Linux.
Я понятия не имею, является ли эта информация точной или нет.В будущем, пожалуйста, публикуйте новую информацию в виде комментария или нового ответа, а не для редактирования ответов других людей.Если вы просто редактируете чужие ответы, вы заставляете их брать на себя ответственность за правильность вашего ответа, чего они могут не хотеть.