8-2 共享库 查找路径
共享库 查找路径
核心总结
由此可以得出共享库的查找路径的顺序是;
-
由环境变量
LD_LIBRARY_PATH
指定的路径 -
由路径缓存文件
/etc/ld.so.cache
指定的路径 -
默认共享库目录,先
/usr/lib
,然后/lib
共享库的系统路径
根据FHS标准规定,Linux系统中共享库的存放位置:
-
/lib
:最关键和基础的库,比如动态链接器,C语言运行库,数学库等。主要是/bin
和/sbin
下的程序需要用到的库。 -
/usr/lib
:开发时用到的共享库,不会被用户的程序或脚本直接用到。 -
/usr/local/lib
:第三方程序的库,比如python解释器相关的共享库就会在/usr/local/lib/python
下。
共享库查找过程
路径存放位置 | 查找路径
应用程序中,依赖的共享库的路径存放在.dynamic
中的DT_NEED
里。
如果是绝对路径,动态链接器就会按照这个路径去找;相对路径则会在/lib
、/usr/lib
和由/etc/ld.so.conf
配置文件中指定的目录中查找共享库。
缓存优先文件
ldconfig
在共享库更新时会更新SO-NAME软链接,同时也会更新SO-NAME缓存,用于给动态链接器快速查找共享库文件。缓存集中存放在/etc/ld.so.cache
中。
LD_LIBRARY_PATH环境变量
Linux系统还提供了特殊的环境变量用于局部修改共享库的查找路径,从而让用户能实现共享库的测试和调试、应用程序级别的虚拟等功能。
改变共享库查找路径最简单的方式就是使用LD_LIBRARY_PATH
环境变量。该变量默认为空,通过在进程启动时设置该变量即可做到修改共享库查找路径:
LD_LIBRARY_PATH=/home/user myexe |
或者通过直接运行动态链接器启动程序也能做到类似的功能:
/lib/ld-linux.so.2 -library-path /home/user myexe |
发布于