When a shared library is opened with
dlmopen(LM_ID_NEWLM), there are no existing shared libraries in the new namespace so many libraries will crash or at least give unresolved symbols.
Is it possible to load a .so with
LM_ID_NEWLM and pull in all of the .so’s that were already linked to the running application?
I could walk
/proc/$$/maps and pull them in first, but it seems like that should be unnecessary.
No, there is no API to copy shared libraries to new namespace from default one. You can either use
/proc/self/maps as you suggested or better yet, use dl_iterate_phdr (
/proc may not always be mounted).
As a side note, if your library fails to load due to unresolved symbols it means that it should be fixed to include its dependencies.
Answered By – yugr