在 Linux 系统中,动态库的加载优先级可以由多个因素决定,包括:
-
1、LD_LIBRARY_PATH 环境变量:如果在环境变量 LD_LIBRARY_PATH 中指定了一个库文件的路径,那么在这个路径中找到的库文件将会被优先加载。
-
2、程序的 RPATH 属性:如果程序在编译时设置了 RPATH 属性,则会优先搜索 RPATH 中指定的路径来加载库文件。
-
3、系统的加载路径:在 /etc/ld.so.conf 文件中定义的路径,以及在 /etc/ld.so.conf.d 目录中的路径,都会被用来搜索库文件。
-
4、系统的默认加载路径:在大多数 Linux 系统中,/lib 和 /usr/lib 目录都是默认的加载路径,因此如果在这些目录中找到了库文件,就会被加载。
注意,上述加载优先级是相对的,也就是说,如果在 LD_LIBRARY_PATH 中找到了库文件,则不会再搜索 RPATH 和其他路径。另外,如果在 RPATH 中找到了库文件,则不会再搜索其他路径。
最后,需要注意的是,LD_PRELOAD 环境变量也可以用来指定要优先加载的库文件。不同于 LD_LIBRARY_PATH 和RPATH,LD_PRELOAD 环境变量指定的库文件会在其他库文件之前被加载,这意味着它们会优先于其他库文件被调用。这可以用来覆盖系统默认的库文件,或者在程序运行时临时加载额外的库文件。
简而言之,Linux 系统中动态库的加载优先级按照以下顺序排列:
- 1、LD_PRELOAD 环境变量指定的库文件
- 2、程序的 RPATH 属性指定的库文件
- 3、LD_LIBRARY_PATH 环境变量指定的库文件
- 4、/etc/ld.so.conf 文件和 /etc/ld.so.conf.d 目录中指定的库文件
- 5、/lib 和 /usr/lib 目录中的库文件
若这些信息对你有帮助,欢迎一键三连
标签:文件,LD,优先级,RPATH,路径,linux,环境变量,加载 From: https://www.cnblogs.com/bianchengyuan/p/16992528.html