我正在寻找一种可移植的(POSIX)方法,以确定使用dlopen()打开的库的路径。像dl_iterate_phdr()dladdr()这样的函数不可移植。

一些man页面详细介绍了dlopen()用来查找要打开的库的路径(ld.so.cacheLD_LIBRARY_PATH,/ lib,/ usr / lib等),因此可以检查所有这些目录,但不能移植。例如,在Linux下,我需要一种解析ld.so.cache的方法,但是在Mac OS X下,没有这样的概念。

请参阅previous question以获得有关我为什么要这样做的详细信息,因为一般情况下建议不要使用dlopen

最佳答案

根本没有任何方法可以随身携带您想要的东西。确实,在没有绝对路径的情况下使用dlopen可能是一个坏主意,对于打算用dlopen加载的模块(由您自己的项目本身或应用程序所使用的另一个库创建并分发)而言,将其用于除模块之外的其他任何东西也可能是一个坏主意)。如果将它与系统库搜索路径一起使用,并且系统上的库“已经存在”,则冒着装载错误版本甚至同名错误库的严重风险。只要您始终向dlopen传递绝对路径,就可以确保确切知道已加载了什么文件(或者更好的是,确切知道要在加载文件之前加载什么文件)。

如果这个答案没有帮助,也许您可​​以更好地解释您要实现的目标。

关于c++ - 确定使用dlopen打开的动态库路径的可移植方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9163028/

10-11 19:34