调用 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
)。
附带说明一下,如果您的库由于未解析的符号而无法加载,则意味着应该修复它以包含其依赖项。
当使用 dlmopen(LM_ID_NEWLM)
打开共享库时,新命名空间中没有现有的共享库,因此许多库会崩溃或至少会给出未解析的符号。
是否可以使用 LM_ID_NEWLM
加载 .so 并引入所有已链接到 运行 应用程序的 .so?
我可以先走/proc/$$/maps
然后把他们拉进来,但好像没必要。
想法?
不,没有 API 可以将共享库从默认名称空间复制到新名称空间。您可以按照建议使用 /proc/self/maps
,或者更好的是,使用 dl_iterate_phdr(可能并不总是安装 /proc
)。
附带说明一下,如果您的库由于未解析的符号而无法加载,则意味着应该修复它以包含其依赖项。