调用 dlmopen(LM_ID_NEWLM) 时是否可以递归填充丢失的共享对象?

Is it possible to recursively populate missing shared objects when calling dlmopen(LM_ID_NEWLM)?

当使用 dlmopen(LM_ID_NEWLM) 打开共享库时,新命名空间中没有现有的共享库,因此许多库会崩溃或至少会给出未解析的符号。

是否可以使用 LM_ID_NEWLM 加载 .so 并引入所有已链接到 运行 应用程序的 .so?

我可以先走/proc/$$/maps然后把他们拉进来,但好像没必要。

想法?

不,没有 API 可以将共享库从默认名称空间复制到新名称空间。您可以按照建议使用 /proc/self/maps,或者更好的是,使用 dl_iterate_phdr(可能并不总是安装 /proc)。

附带说明一下,如果您的库由于未解析的符号而无法加载,则意味着应该修复它以包含其依赖项。