源码编译完一个库,make install 装得好好的,一跑程序却报 library not found,路径看着明明都对。这种时候先别急着改环境变量,跑一下 ldconfig 试试。
它做了什么
Linux 跑程序时找共享库,不是每次都全盘搜硬盘,而是先查一份缓存文件 /etc/ld.so.cache。ldconfig 的任务就是扫描配置里的库目录,把所有库的位置重新整理成这份缓存。配置来源是 /etc/ld.so.conf,以及它 include 进来的 ld.so.conf.d 目录下的一堆 conf 文件。
常用姿势
sudo ldconfigldconfig -p | grep libssl第一条是重建缓存,装完新库跑一次就生效。第二条用 -p 把缓存里记录的库全列出来,配合 grep 查某个库在不在、指向哪个文件,排查问题时特别好用。
哪些情况需要跑它
- 源码安装的库默认进了 /usr/local/lib,而这个目录不一定在缓存配置里,先写进配置再刷新
- 升级了库文件,老程序突然跑不起来,刷新一下看看
- 自己编译的 so 文件丢进库目录,程序找不到时
临时方案也有:设置 LD_LIBRARY_PATH 环境变量指向库目录,当场就能跑。但这个只对当前会话有效,而且容易把别的程序用的库版本搞乱,属于应急手段,长期还是靠配置文件加缓存。
排查顺序记一条:报找不到,先用 -p 查缓存里有没有记录,有就核对程序链接的名字和版本对不对,没有就补配置再刷新。改完配置别忘了执行命令,光写配置文件是不生效的,很多新手卡在这一步。