[英]Portable way to determine path to dynamic library opened with dlopen
我正在寻找一种可移植(POSIX)的方法来确定使用dlopen()
打开的库的路径。 dl_iterate_phdr()
和dladdr()
类的函数不可移植。
有些man
页详细的路径dlopen()
找到库打开( ld.so.cache
, LD_LIBRARY_PATH
,/ lib目录,/ usr / lib目录,...),所以检查所有这些目录可能是可能的,但不便携式的。 例如,在Linux下,我需要一种解析ld.so.cache
的方法,但是在Mac OS X下,没有这样的概念。
有关我为什么要执行此操作的详细信息,请参见上一个问题 ,因为在一般情况下,建议不要使用dlopen
。
根本没有任何方法可以随身携带您想要的东西。 确实,在没有绝对路径的情况下使用dlopen
可能是一个坏主意,并且将其用于除打算用dlopen
加载的模块以外的其他任何东西(由您自己的项目本身或应用程序使用的另一个库创建并分发)也是一个坏主意。 )。 如果将它与系统库搜索路径一起使用,并且系统上的库“已经存在”,则冒着装入错误版本甚至同名库的风险。 只要始终向dlopen
传递绝对路径,就可以确保确切知道已加载了什么文件(或者更好的是,确切知道要在加载文件之前加载什么文件)。
如果这个答案没有帮助,也许您可以更好地解释您要达到的目标。
简单的答案是,没有答案。 这是Windows优于Unix的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.