c++ - Does dlopen re-load already loaded dependencies? If so, what are the implications? -
i have program, code-named foo. foo depends on common.so , linked in normal way (sorry don't know technical way that). when foo running dynamically loads bar.so using dlopen(). far good.
but, bar.so depends on common.so. dlopen() re-load common.so (from i've read loads required dependencies recursively), or detect loaded? if re-load it, cause problems in program? both foo , bar.so need see changes in common.so either of them make static variables there.
maybe design needs changed or requires use of -rdynamic (which don't quite understand yet)?
the posix spec dlopen() says:
only single copy of executable object file shall brought address space, if dlopen() invoked multiple times in reference executable object file, , if different pathnames used reference executable object file.
on linux, implemented using reference count; until dlclose called equal number of times, shared object remain resident.
[update]
i realize asking shared objects implicitly loaded dependencies, same principle applies. otherwise, many things break... in particular, global constructors in shared object run multiple times, wreak havoc.
Comments
Post a Comment