Tangential question: there is one reason to use NODELETE in the dlopen(3) man page:
https://man7.org/linux/man-pages/man3/dlopen.3.html
RTLD_NODELETE (since glibc 2.2)
Do not unload the shared object during dlclose().
Consequently, the object's static and global variables
are not reinitialized if the object is reloaded with
dlopen() at a later time.
Are there any other times when it's beneficial to use NODELETE?