是否可以从代码中获取依赖库的位置

Is it possible to get location of dependent libraries from within code

本文关键字:依赖 位置 获取 代码 是否      更新时间:2023-10-16

我想用dlopen函数从程序中加载一些依赖库。有可能知道这些图书馆的实际位置吗?

例如,ldd显示了系统中所有具有路径的依赖库。它是如何工作的?是否可以通过C++代码中的一些调用来获取我需要用dlopen加载的对应库的路径?

man dlopen可以读取:

函数dlopen()加载以null结尾的字符串文件名命名的动态库文件,并返回不透明的";手柄;用于动态库。如果filename为NULL,则返回的句柄用于主程序。如果文件名包含斜线("/"),则它被解释为(相对或绝对)路径名。否则,动态链接器按如下方式搜索库(有关更多详细信息,请参阅ld.so(8)):
  • (仅限ELF)如果调用程序的可执行文件包含DT_RPATH标记,而不包含DT_RUNPATH标记,则会搜索DT_RPATH标签中列出的目录。

  • 如果在程序启动时,环境变量LD_LIBRARY_PATH被定义为包含以冒号分隔的目录列表,则会搜索这些目录。(作为一种安全措施,设置用户ID和设置组ID程序会忽略此变量。)

  • (仅限ELF)如果调用程序的可执行文件包含DT_RUNPATH标记,则会搜索该标记中列出的目录。

  • 检查缓存文件/etc/ld.so.cache(由ldconfig(8)维护)以查看它是否包含文件名条目。

  • 将搜索目录/lib/usr/lib(按顺序)。

因此,如果所需的库是";安装";,一个简单的CCD_ 6就可以了。