Dav*_*tte 2 c linux search-path
我想要dlopen()特定目录中的每个共享库.为了做到这一点,
检索linux库搜索路径的最简洁方法是什么.或者是否有更快的方法在该路径中查找特定目录?
posix会更好.
POSIX不支持查找共享库搜索路径上的目录的机制(LD_LIBRARY_PATH例如,它没有强制要求),因此任何解决方案本质上都是特定于平台的.
Linux存在一些问题,因为要使用的值可以基于环境变量中的内容/etc/ld.so.conf以及任何运行时值LD_LIBRARY_PATH; 其他系统存在类似问题.默认位置也因系统而异-与/lib和/usr/lib成为通常为32位Linux机器,但/lib64和/usr/lib64在至少一些64位机器上被使用.但是,其他平台使用64位软件的其他位置.例如,Solaris使用/lib/sparcv9和/usr/lib/sparcv9,例如(尽管文档提到/lib/64和/usr/lib/64,他们是符号链接的sparcv9目录).Solaris还有环境变量LD_LIBRARY_PATH_64和LD_LIBRARY_PATH_32.HP-UX和AIX传统上使用的其他变量不是LD_LIBRARY_PATH- SHLIB_PATH和LIBPATH,IIRC - 虽然我相信AIX现在也使用LD_LIBRARY_PATH了.并且,在Solaris上,用于配置共享库的工具是"crle"(配置运行时链接环境),而模拟/etc/ld.so.conf是/var/ld/ld.config或者/var/ld/64/ld.config.另外,当然,在共享库的扩展而变化(.so,.sl,.dylib,.bundle,等等).
因此,您的解决方案将是特定于平台的.您需要确定默认位置,要读取的环境变量以及要读取的配置文件以及相关的文件扩展名.鉴于这些,那么它主要是一个SMOP - 简单的编程问题:
opendir())
readdir()依次读取每个文件名()dlopen()在相关文件的路径上使用.dlclose()closedir()另请参阅下面评论中的注释......完整的主题适用于从平台到平台的各种变化.