Правильно ли определен порядок выгрузки разделяемых библиотек при выходе из программы? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть библиотека libfooloader.so, которая связана с приложением, которое загружает libfoo.so с помощью dlopen.

Ссылка на библиотеку libfoo хранится в глобальном интеллектуальном указателе в формате RAII в libfooloader.so.

Таким образом, когда файл libfooloader.so выгружается, он также должен автоматически отключать libfoo.

Однако, когда программа завершается, сначала кажется, что libfoo.so выгружается, а затем libfooloader.so, который вызывает очистку. код уже выгруженного libfoo.so, который вызывает сбой. По крайней мере, похоже, что это так.

Поскольку библиотеки dlopen-ed должны закрываться с помощью dlclose, невыполнение этого требования может привести к утечке - по крайней мере, я думал, что так и будет. Но кажется, что dlopened lib по-прежнему автоматически закрывается при выходе из программы. Есть ли способ контролировать это поведение? Если нет, мне придется уничтожить все глобальные состояния из библиотеки.

...