我正在为linux机器开发一个共享库,它使用rpath相对于主可执行文件动态加载。 现在,库本身试图相对于其位置动态加载其他库但没有rpath(我使用scandir搜索某个文件夹中的共享库 - 我还不知道他们的名字)。
仅当工作目录设置为共享库位置时才有效,否则我会按预期查看其他目录。
共享库是否有任何实用,可靠的方法来确定它所在的位置?
我知道,我可以使用/ proc / self / maps或类似的东西来获取加载的文件,但只有库知道它自己的名字才能正常工作。
另一个想法是使用dlinfo(),但要使用它,共享库需要知道自己的句柄。
答案 0 :(得分:1)
共享库是否有任何实用,可靠的方法 确定它所在的位置?
我使用dlinfo
和/proc/self/maps
(proc
可能并非总是挂载,尤其是在容器中。
我知道,我可以使用/ proc / self / maps或类似的东西, 获取加载的文件,但这只适用于库 知道自己的名字。
实际上,您可以指向库中的一些代码(最好是一些内部标签,以避免弄乱PLT / GOT)并将结果与从/proc/self/maps
(或dlinfo
获得的内存范围进行比较})。