Linuxy应用程序加载动态链接库的默认路径

发布时间 2023-08-18 10:35:03作者: feipeng8848

在 Linux 系统中,当应用程序执行时,系统会按照一定的规则去寻找动态链接库(也称为共享库或 .so 文件)。系统使用一组默认的搜索路径来查找这些库,以便在运行时正确加载所需的库。以下是 Linux 系统寻找动态链接库的一般规则:

  1. 系统默认路径
    Linux 系统会在一组默认的路径中查找动态链接库。这些路径通常包括 /lib/usr/lib。在 64 位系统中,可能还会包括 /lib64/usr/lib64

  2. LD_LIBRARY_PATH 环境变量
    如果设置了 LD_LIBRARY_PATH 环境变量,系统会在这个环境变量中指定的路径中查找动态链接库。例如:

    export LD_LIBRARY_PATH=/path/to/library/directory
    

    注意,使用 LD_LIBRARY_PATH 可能会导致库的混乱和不稳定,因此谨慎使用。

  3. /etc/ld.so.conf 文件
    系统会读取 /etc/ld.so.conf 文件中列出的路径,以查找动态链接库。在这个文件中,您可以列出需要搜索的目录路径。

  4. /etc/ld.so.conf.d/ 目录
    /etc/ld.so.conf.d/ 目录中包含了其他库路径的配置文件。这些文件被系统读取以添加额外的库搜索路径。

  5. rpath/rpath-link 编译选项
    在编译应用程序时,您可以使用 -Wl,-rpath-Wl,-rpath-link 等编译选项来指定运行时搜索库的路径。

  6. Cache 文件
    Linux 系统维护着一个动态链接库的缓存文件,用于加快库的查找速度。此缓存通常位于 /etc/ld.so.cache

系统会按照上述规则依次查找动态链接库,直到找到所需的库或无法找到为止。如果找不到所需的库,应用程序可能会失败并报告缺失的库错误。通常情况下,将库放置在系统默认的库路径下是最为推荐和稳定的做法。